仓酷云

标题: 了解下JAVA的Hibernate(JPA)多对多(ManyToMany)联系关系映照不完善的地方 [打印本页]

作者: 灵魂腐蚀    时间: 2015-1-18 11:03
标题: 了解下JAVA的Hibernate(JPA)多对多(ManyToMany)联系关系映照不完善的地方
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点
最近,在做的一个NewsMS项目中,必要用到多对多联系关系映照,以下是项目顶用到的两个实体类:用户类User和脚色类Role,它们之间是多对多的干系。
  1. //用户表
  2. @Entity
  3. @Table(name="rong_user")
  4. publicclassUser{
  5.    //省略别的内容
  6.    privateSet<Role>roles=newLinkedHashSet<Role>();   //脚色汇合
  7.    
  8.    @ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
  9.    @JoinTable(name="rong_user_role",joinColumns={@JoinColumn(name="user_id")},inverseJoinColumns={@JoinColumn(name="role_id")})
  10.    @OrderBy("id")
  11.    publicSet<Role>getRoles(){
  12.        returnroles;
  13.    }
  14.    publicvoidsetRoles(Set<Role>roles){
  15.        this.roles=roles;
  16.    }
  17. }
  18. //脚色表
  19. @Entity
  20. @Table(name="rong_role")
  21. publicclassRole{
  22.    
  23.    //省略别的内容
  24.    privateSet<User>user=newLinkedHashSet<User>();       //用户汇合
  25.    @ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},mappedBy="roles",fetch=FetchType.LAZY)
  26.    publicSet<User>getUser(){
  27.        returnuser;
  28.    }
  29.    publicvoidsetUser(Set<User>user){
  30.        this.user=user;
  31.    }
  32. }
复制代码
这两个天生数据库中的三个表,分离是rong_user,rong_role和一其中间表rong_user_role。
Hibernate和JPA把持联系关系干系的,只能是一方,不克不及两边把持的,下面的程序中,我经由过程在Role类中设置mappedBy="roles"来设置由User来把持干系,
如许,成绩就呈现了:当我在要删除脚色Role时,假如没有效户具有这个脚色的话,就可以乐成删除;假如有效户具有这个脚色的时分,就不克不及删除,会抛以下非常:
12:53:33,125 WARNJDBCExceptionReporter:100-SQLError:1451,SQLState:23000
12:53:33,125ERRORJDBCExceptionReporter:101-Cannotdeleteorupdateaparentrow:aforeignkeyconstraintfails(`newsms/rong_user_role`,CONSTRAINT`FKF1698421A337A5FA`FOREIGNKEY(`role_id`)REFERENCES`rong_role`(`id`))
12:53:33,171ERRORAbstractFlushingEventListener:324-Couldnotsynchronizedatabasestatewithsession
org.hibernate.exception.ConstraintViolationException:CouldnotexecuteJDBCbatchupdate
<p>
再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
作者: 海妖    时间: 2015-1-20 13:19
Java 编程语言的风格十分接近C、C++语言。
作者: 柔情似水    时间: 2015-1-23 08:04
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 灵魂腐蚀    时间: 2015-1-25 20:14
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者: 再见西城    时间: 2015-2-3 19:58
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 分手快乐    时间: 2015-2-9 04:38
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 活着的死人    时间: 2015-2-26 22:28
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者: 仓酷云    时间: 2015-3-8 18:20
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者: 山那边是海    时间: 2015-3-16 09:42
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 深爱那片海    时间: 2015-3-22 22:09
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者: 兰色精灵    时间: 2015-3-22 22:09
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者: 愤怒的大鸟    时间: 2015-3-22 22:09
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2