实体BEAN的关联

今天自己写了一个例子,有关实体BEAN的关联问题,我写的这个例子是一对多的情况,一是人,多是狗,一个人可以养多条狗,每条狗都必须有一个主人,在删除主人的时候,狗就没有存在的必要了,所以狗也要跟着删除,可是删除狗的时候,主人却可以在.一开始我实现的时候,删除狗的操作是错误的,我以为直接把Person里面的Dog删掉,然后更新Person就可以了,谁知不是这样的,你在增加了Person中的狗的时候,你更新Person就可以把狗加进来了,可是当你把Person里面的狗删除掉时,再更新Person,数据库里面的狗却不会少.而要你显示的调用em.remove()去删除你想删除的狗,并且你对这狗不能设置为级联删除,否则你删除狗的时候把人也删掉了,这当然不是我们希望看到的.

下面附上代码

远程接口代码
  1.   
  2. package com.hadeslee.session;   
  3.   
  4. import com.hadeslee.entity.Person;   
  5. import java.util.List;   
  6. import javax.ejb.Remote;   
  7.   
  8.   
  9. /**  
  10.  * This is the business interface for PersonDAO enterprise bean.  
  11.  */  
  12. @Remote  
  13. public interface PersonDAORemote {   
  14.     public void insertPerson(Person p);   
  15.     public List getAllPersons();   
  16.     public Person findPerson(long id);   
  17.     public void deletePerson(long id);   
  18. }   
java 代码
  1.   
  2. package com.hadeslee.session;   
  3.   
  4. import com.hadeslee.entity.Dog;   
  5. import com.hadeslee.entity.Person;   
  6. import java.util.List;   
  7. import javax.ejb.Remote;   
  8.   
  9.   
  10. /**  
  11.  * This is the business interface for PersonToDogs enterprise bean.  
  12.  */  
  13. @Remote  
  14. public interface PersonToDogsRemote extends PersonDAORemote{   
  15.     public void addDog(Person p,Dog dog);   
  16.     public Person removeDog(Person p,Dog dog);   
  17.     public List getDogs(Person p);   
  18.     public Person getOwner(Dog dog);   
  19. }   
java 代码
  1. /*  
  2.  * PersonDAOBean.java  
  3.  *  
  4.  * Created on 2006年12月13日, 下午3:53  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package com.hadeslee.session;   
  11.   
  12. import com.hadeslee.entity.Person;   
  13. import java.util.List;   
  14. import javax.ejb.Stateful;   
  15. import javax.persistence.Query;   
  16. import javax.persistence.EntityManager;   
  17. import javax.persistence.PersistenceContext;   
  18.   
  19. /**  
  20.  *  
  21.  * @author lbf  
  22.  */  
  23. @Stateful  
  24. public class PersonDAOBean implements com.hadeslee.session.PersonDAORemote {   
  25.     @PersistenceContext  
  26.     protected EntityManager em;   
  27.     /** Creates a new instance of PersonDAOBean */  
  28.     public PersonDAOBean() {   
  29.     }   
  30.   
  31.     public void insertPerson(Person p) {   
  32.         em.persist(p);   
  33.         System.out.println("保存成功");   
  34.     }   
  35.   
  36.     public List getAllPersons() {   
  37.         Query query=em.createQuery("select p from Person p order by p.id");   
  38.         return query.getResultList();   
  39.     }   
  40.   
  41.     public Person findPerson(long id) {   
  42.         return em.find(Person.class,id);   
  43.     }   
  44.     public void deletePerson(long id){   
  45.         em.remove(em.find(Person.class,id));   
  46.     }   
  47.        
  48. }   
java 代码
  1. /*  
  2.  * PersonToDogsBean.java  
  3.  *  
  4.  * Created on 2006年12月13日, 下午4:50  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package com.hadeslee.session;   
  11.   
  12. import com.hadeslee.entity.Dog;   
  13. import com.hadeslee.entity.Person;   
  14. import java.util.List;   
  15. import javax.ejb.Stateless;   
  16. import javax.persistence.Query;   
  17.   
  18. /**  
  19.  *  
  20.  * @author lbf  
  21.  */  
  22. @Stateless  
  23. public class PersonToDogsBean extends PersonDAOBean implements com.hadeslee.session.PersonToDogsRemote {   
  24.        
  25.     /** Creates a new instance of PersonToDogsBean */  
  26.     public PersonToDogsBean() {   
  27.     }   
  28.   
  29.     public void addDog(Person p, Dog dog) {   
  30.         p.addDog(dog);   
  31.         em.merge(p);   
  32.     }   
  33.   
  34.     public Person removeDog(Person p, Dog dog) {   
  35.         //em.remove(dog);   
  36.         p.removeDog(dog);   
  37.         System.out.println("此时P的大小是:"+p.getDogs().size());   
  38.         em.merge(p);   
  39.         return p;   
  40.     }   
  41.   
  42.     public List getDogs(Person p) {   
  43.         return p.getDogs();   
  44.     }   
  45.   
  46.     public Person getOwner(Dog dog) {   
  47.         Query query=em.createQuery("select p from Person p where p.id=?1");   
  48.         query.setParameter(1,dog.getOwner().getId());   
  49.         return (Person)query.getSingleResult();   
  50.     }   
  51.        
  52. }   

目前的代码是不能正常删除的,要正常删除狗的话,必须把em.remove() 那句话还原,然把再把em.merge()那句话注释起来才行

还有一个现象,那就是我在对远程对象进行了操作以后,并不会反映到我的本地对象,比如我调用了删除人里面的一条狗,在远程或者在数据库里面确实是删掉了,可是我在调用人的时候,里面还是有那么的狗,这样就会产生不同步的现象,为了消除这种现象,我把接口写了一个,改为进行了删除操作的时候,它会再次返回Person对象,这个时候就可以保证远程对象和本地对象的一致性了.

增加代码没写,所以每次增加了狗后,调用Person对象时,依然是增加前一样的,也就是说,当我持有了远程对象发过来的本地对象后,如果我不对其进行操作,无论你怎么调用远程方法,此方法会对其有影响的,JVM都不会返回一个最新的给你,而你用的永远是第一次传过来的那个以象,所以,在远程对象传输中,必须要注意同步性,要么就每次都从远程去取最新的对象,要么就先对本地对象做同样的操作,比如前面的addDog动作,先在本地执行一遍,然后远程执行远程的,这样就可以同步了,不过我觉得如果是网络允许的情况下,还是每次对对象操作后都能返回最新的对象好一些,免得手工去保持和远程对象的同步,这样不可靠.

一对多目前只看到了这么多,接下来要看一下多对多的情况.

内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值