了解下JAVA的Hibernate(JPA)多对多(ManyToMany)联系关系映照不完善的地方
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点最近,在做的一个NewsMS项目中,必要用到多对多联系关系映照,以下是项目顶用到的两个实体类:用户类User和脚色类Role,它们之间是多对多的干系。
//用户表
@Entity
@Table(name="rong_user")
publicclassUser{
//省略别的内容
privateSet<Role>roles=newLinkedHashSet<Role>(); //脚色汇合
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinTable(name="rong_user_role",joinColumns={@JoinColumn(name="user_id")},inverseJoinColumns={@JoinColumn(name="role_id")})
@OrderBy("id")
publicSet<Role>getRoles(){
returnroles;
}
publicvoidsetRoles(Set<Role>roles){
this.roles=roles;
}
}
//脚色表
@Entity
@Table(name="rong_role")
publicclassRole{
//省略别的内容
privateSet<User>user=newLinkedHashSet<User>(); //用户汇合
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},mappedBy="roles",fetch=FetchType.LAZY)
publicSet<User>getUser(){
returnuser;
}
publicvoidsetUser(Set<User>user){
this.user=user;
}
}这两个天生数据库中的三个表,分离是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的复杂性。 Java 编程语言的风格十分接近C、C++语言。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
页:
[1]