最近研究了下hibernate的级联删除.有几个问题,大家来帮帮忙.
(1)用<many-to-one>实现一对一的情况下,也就是用外键关联的方式实现一对一也不能写cascade="delete"是么?
(2)用<one-to-one>实现一对一关联的情况下.不如我一个Person类里有一个IdCard类的引用,有一个Address的引用,就是说一个person对应一个IdCard并且对应一个Address.这种情况下根本就没法用主键一对一的方式去映射了是么?必须用外键关联也就是<many-to-one>的方式去实现一对一是吗?那也就是说级联删除根本也就用不了了是么?
(1)用<many-to-one>实现一对一的情况下,也就是用外键关联的方式实现一对一也不能写cascade="delete"是么?
(2)用<one-to-one>实现一对一关联的情况下.不如我一个Person类里有一个IdCard类的引用,有一个Address的引用,就是说一个person对应一个IdCard并且对应一个Address.这种情况下根本就没法用主键一对一的方式去映射了是么?必须用外键关联也就是<many-to-one>的方式去实现一对一是吗?那也就是说级联删除根本也就用不了了是么?
解决方案 »
- java.lang.reflect.InvocationTargetException,请问这个怎么解决啊?
- 大家好,菜鸟求帮助
- 用JavaMail做的邮件 添加附件问题
- JBOSS5.0.0 ga 启动异常
- jboss启动:org.hibernate.MappingException: entity class not found:
- 一个项目快结束了,却发现汉字大问题......
- 关于Socket字节序问题
- java.lang.NoClassDefFoundError。在使用PortableRemoteObject函数定位EJBHome对象时出现了这个错误,我怎么看都对,为什么会出错呢?
- 求解啊啊啊
- 谁能给个spingmvc能下载文件的源码啊 百度了网上的那几个 都不能下载
- tomcat无法启动?
- 文件上传FTP,求助!!!(在线求助)
(2)可以考虑使用联合主键
但楼主所说的第一种情况:<many-to-one>你要做成一对一,那肯定会加unique="true"属性,这时你完全可以加cascade="delete",因为这时的对应关系是一对一,所以级联删除很有意义。而楼主所说的第二种情况:应该加个第三方表,即这个中间表中有三个字段作为联合主键,最好别用主键关联,其实一对一主键关联默认就有all级联关系,其他关联关系都没有这种默认设置。如果楼主想用<one-to-one>这样主键关联这三张表也可以,你配置时就两个两个一关联,都配成双向一对一,这样不用你加cascade="delete"属性,直接就可以删除所级联的对象。
还有为什么你要把hibernate的映射关系搞这么复杂呢?对自己和项目都没有任何的好处,你现在可以去公司看看,还有几个项目经理会用hibernate的映射关系?记得我框架老师曾经说过,“用hibernate做映射时只要配置单个类和它的普通属性就行了,如果你连关系的映射也配置了,那灾难就离你不远了!”还有我觉得楼主很像陕西人,嘿嘿!