|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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的复杂性。 |
|