高级项目进行时 15

本文探讨了JavaScript中按钮状态切换的技巧、Hibernate中的save与saveOrUpdate方法的区别、如何判断对象是否被持久化、以及如何在MyEclipse中导入jar包源文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1、 如何是按钮在灰亮之间切换?  很简单的一个问题竟被我调试了个把小时才搞定

         错误版本1:

       <head>
   <script language="javascript1.2" type="text/javascript">
function aa(){
    var flag = document.getElementById('b').disabled;
    if(flag){
document.getElementById('b').disabled=false;
    flag = false;
 }
 if(flag==false)
   
 document.getElementById('b').disabled=true;

}
</script>


</head>

<body>

<input name="a" type="button" value="women" onClick="aa();">
<input id="b" type="button" value="nimen" disabled="disabled">

</body>

——————错误版本2

   <script language="javascript1.2" type="text/javascript">
function aa(){
    var flag = document.getElementById('b').disabled;
   if(document.getElementById('b').disabled){
   document.getElementById('b').disabled=false;
    }
 if(document.getElementById('b').disabled==false){
   
 document.getElementById('b').disabled=true;
 }
}
</script>

  ————正确版

function aa(){
    var flag = document.getElementById('b').disabled;
 if(document.getElementById('b').disabled){
 
 document.getElementById('b').disabled=false;
  
 }
 if(flag==false){
 
 document.getElementById('b').disabled=true;
 }
}

 ————————总结:

   发现在上述js当中加入alert语句与不加alert语句会看到不同的效果, 经过分析我认为假如不加入alert的话前后两个方法调用的时间间隔太短了, 因此我们看不到效果的变化。

2、 hibernate 的save与saveOrUpdate方法的比较?

      Hibernate配置文件通过unsaved-value来确定对象是否被持久化过。你完全可以通过自己setId的方式来欺骗

Hibernate,让Hibernate认为你new出来的临时对象已经被持久化过。

只不过这样的方式没有太大实际的用途,你也许可以用来写测试。如果你new出来的临时对象是数据库没

有的记录,你让Hibernate去操作该记录,只会造成程序运行异常。

总而言之,最好不要自己管理id,而是让Hibernate管理Id,POJO的setId()方法虽然是public的,但那

不是开放给你用的,只是开放给Hibernate使用的。我一向认为setId是罪恶的。

3、 今天才了解到hibernate中UserType这中东东, 正在学习中.....稍后呈上学习笔记....

4、 如何在myEclipse下导入jar包相应的源文件?

     选择你的项目右键Properties--》java build path --》选择xxx.jar
点击jar文件前面的小三角符号--》Source Attacment--》Edit--》External File --》选择刚才下载的xxx.jar包对应的源文件即可

 

5、 hibernate拾遗

       在Hibernate中,最核心的概念就是对PO的状态管理。一个PO有三种状态:

a、未被持久化的VO
此时就是一个内存对象VO,由JVM管理生命周期

b、已被持久化的PO,并且在Session生命周期内
此时映射数据库数据,由数据库管理生命周期

c、曾被持久化过,但现在和Session已经detached了,以VO的身份在运行
这种和Session已经detached的PO还能够进入另一个Session,继续进行PO状态管理,此时它就成为PO的

第二种状态了。这种PO实际上是跨了Session进行了状态维护的。

     只要PO的状态是第二种或者第三种,Hibernate都可以成功进行delete和update操作,如果是

第一种,那么Hibernate就认为,还没有资格调用上面两种操作。

 

6、 一个对象是否被持久化过,应该取决于这个对象是否是从数据库查询出来的。这个是显而易见的。今天

在做项目的时候发现这样一个问题:例如有一个类Parent,其主键是id,还有name等字段,另一个类

Child于Parent构成父子关系。我现在希望通过级联删除将某一个父亲和它的儿子都删除了,按照

Hibernate手册上的做法:
Java代码
Parent p = (Parent); session.load(Parent.class, pid);;  
session.delete(p);; 

这个非常容易理解,将父亲从数据库中读出来,那么这个对象显然已经被持久化了。再删除时,如果配

置文件都正确,会进行级联删除。
如果现在我已经有了parent的主键pid,直接去构造一个和数据库查出来的parent类一摸一样的对象p:
Java代码
Parent p = new Parent();;  
p.setId(pid);;  
p.setName(name);;  
...... 

Parent p = new Parent();;
p.setId(pid);;
p.setName(name);;
......

并用上面的一段代码来代替:
Java代码
Parent p = (Parent); session.load(Parent.class, pid);; 

Parent p = (Parent); session.load(Parent.class, pid);;

同样执行删除操作,Hibernate会报错,并且告诉我有外键的约束。

我不明白的是:对于delete操作,Hibernate到底是如何判别这个Parent对象是否是被持久化过的呢?我

直接构造一个和数据库中查出来一样的对象,从外观上看似乎是一致的,但是我也知道,从本质上讲,

一定不一样。只是对于Hibernate来说,它到底是如何分辨出这两种不同的对象的呢?
 

    ——————另外发现:

    手动把所有的child都建出来, 这样就能删除了.

Parent p = new Parent();
p.setId(pid);
Child c = new Child();
c.setId(cid);
p.addChild(c);

session.delete(p);


经过试验,这种方法是可行的

 

7、 偶们经常会遇到一些用户需求, 需要实现一个区间类型的东东:

public class Entity {
    private Date startDate;
    private Date endDate;
    private ......;
}

如项目的开始/结束时间, 人员的任职期间等等

但是如要比较这个对象和其他对象区间的关系, 就得写一些恶心的code:
if(this.startDate > that.startDate && this.endDate < that.endDate)
if(this.startDate < that.startDate) ......
一堆的if else了.

或许你会觉得这些小东西这样写就可以了, 但是为了有一个更完美, 更好用的Domain Object, 是值得偶

们在这些小细节上操劳的.

有一些现成的lib就是做这些东西的, 比如:
http://timeandmoney.sourceforge.net/
http://joda-time.sourceforge.net/
 

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值