Hibernate用了还是很久了。但是最近做的一个项目遇到一个看似简单的问题,但是用了几天都没有解决的一个问题如下:用Address和person来举例
三个数据表:address: int id-pk,
person: int id-pk ,
add_per: int aid, int pid,int adx,int pdx
hibernate就是用的List基于中间表的多对多,
开始用起来似乎没有问题,后来发现增加的时候只会有update或者是被save的一方被增长index,如果说一起update或者save也一样,删除的时候还会报Duplicate entry key的错误
哎~几天了~~大家帮我看看,谢谢~在线等哦~~
三个数据表:address: int id-pk,
person: int id-pk ,
add_per: int aid, int pid,int adx,int pdx
hibernate就是用的List基于中间表的多对多,
开始用起来似乎没有问题,后来发现增加的时候只会有update或者是被save的一方被增长index,如果说一起update或者save也一样,删除的时候还会报Duplicate entry key的错误
哎~几天了~~大家帮我看看,谢谢~在线等哦~~
解决方案 »
- 初学servlet 看了韩顺平的视频, 写了简单用户登录的代码,继承了Httpservlet ,发现不能进行页面跳转,各位大神看看,小弟没分,真心求助
- 大家帮忙分析下,这段正则表达式。
- 求java swing 高手给点思路
- servlet向jsp传参的问题
- 我的简历,欢迎砖头
- j2ee群号,66305398,欢迎共商大计,成就事业
- 请教高手!救急!
- 用ant+subversion编译时候,如何忽略字符乱码的错误
- 向mysql插入数据,插入的英文可以,但中文就不行?
- struct1.1 的 message resources 如何 解决 中文问题
- 编成
- 如何让程序在每天的固定时间运行(JAVA)
好的我补充一下配置:------------address的配置-------------------------
<list name="persons" inverse="false" table="add_per" cascade="save-update" lazy="false">
<key column="aid"/>
<index column="pdx" type="java.lang.Integer"></index>
<many-to-many column="pId" class="Person"/>
</list>
</class>
</hibernate-mapping>
------------person的配置---------------------------
<list name="addresses" inverse="true" table="add_per" cascade="save-update" lazy="false">
<key column="pId"/>
<index column="adx" type="java.lang.Integer"></index>
<many-to-many column="aId" class="Address"/>
</list>
</class>
</hibernate-mapping>
然后用多对一进行映射。
多对多用hibernate自生成的本来就很复杂(它也是自动帮你生成一个中间表,但是配置有点多、混),
你还弄一个双向,试想一下,对于生成表的结构你能一下明了过来吗就拿你这个来举例
address: int id-pk,
person: int id-pk ,
add_per: int aid, int pid,int adx,int pdx 你自己建一个实体类就叫
Add_Person, 属性:
private int id ;
private Address address; <多对一>
private Person person ;<多对一>OK在给这个实体类加一个配置文件,就行了思路也清晰了,项目中一般就是这样做的啊
其实你如果这样写的话相当于就是用单纯的sql来做了,我那样配置就是用中间表来解决这个问题的。而且其他人说的都是拆开。恩·不过后来我也是这样做的。估计是本身hibernate就没有提供这样的完善的解决方案。
你把cascade设置称all试试其实cascade可以不设置的,你两方都手动保存呗。