仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 593|回复: 11
打印 上一主题 下一主题

[学习教程] 了解下JAVA的Hibernate(JPA)多对多(ManyToMany)联系关系映照不完善的地方

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:03:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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:53 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
柔情似水 该用户已被删除
板凳
发表于 2015-1-23 08:04:39 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
灵魂腐蚀 该用户已被删除
地板
 楼主| 发表于 2015-1-25 20:14:32 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
再见西城 该用户已被删除
5#
发表于 2015-2-3 19:58:05 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
分手快乐 该用户已被删除
6#
发表于 2015-2-9 04:38:53 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
活着的死人 该用户已被删除
7#
发表于 2015-2-26 22:28:54 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
8#
发表于 2015-3-8 18:20:07 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
山那边是海 该用户已被删除
9#
发表于 2015-3-16 09:42:44 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
深爱那片海 该用户已被删除
10#
发表于 2015-3-22 22:09:38 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
兰色精灵 该用户已被删除
11#
发表于 2015-3-22 22:09:39 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
愤怒的大鸟 该用户已被删除
12#
发表于 2015-3-22 22:09:39 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 15:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表