hibernate 双属性组合主键的数据表对应两个java文件,请问如何对该表进行数据的增删改查?大神帮忙~
发布网友
发布时间:2022-04-14 15:31
我来回答
共1个回答
热心网友
时间:2022-04-14 17:00
我觉得你是没有将两个类的关系搞清楚,并且受了常规思维的影响。
首先,你贴出来的配置文件并不完全,最上边少了一个<class ....>标签此标签表明了这个映射文件配置的是哪个类与数据库中字段的映射关系,分析可知配置的是CheckTable的。
既然这个映射文件要配置CheckTable的属性信息与数据库表中字段的映射关系,那么我们就来看一下CheckTable类中有哪些属性需要配置,我们可以看到有两个,一个是id,另外一个是partScore,那么就配置呗。首先配置主键id,这里我们就需要仔细分析了,这个主键是我们平时常见的id吗?不是,因为它是一个组合主键,那么如何来描述这个组合主键呢?仔细一看发现id的类型是CheckTableId,是一个引用类型,注意了,是一个引用类型!然后顺理成章我们就要看看这个引用类型CheckTableId到底是一个什么东东了!接下来分析CheckTableId这个类,发现这个类中有两个属性tableId和contentId,到这里我们不难想象到原来由于组合主键不好直接配置,所以才将组合主键用一个类(CheckTableId)来描述,到这里我们就发现其实映射文件中<composite-id>标签中配置的就是组合主键的具体信息,这样第一个CheckTable类的第一个属性主键id我们就配置好映射关系了。
至于第二个属性partScore,这是一个常规属性,相信应该不用我多做解释,正常配置就行了!
最后,我再来解释一下你括号里注明的两处不懂得地方:
第一处id,相信看了上边的解释你已经知道它并不算是我们平时常见的id,而是一个组合主键。
而第二处“后边两个方法是干嘛的”呢?分析这两个方法名,equals()和hashcode(),这两个方法平时有什么用呢?这两个方法平时都是在比较两个对象是否相同时才会用到,才会被重写,既然这里重写了这两个方法,那就说明是为了判断两个CheckTableId是不是同一个!那么为什么要判断呢?不判断行不行呢?答案显然是“不行”,因为既然这是在配置对象与数据库字段的映射关系,那么主键就必须保证唯一,组合主键也一样得唯一,否则数据库就无法区分某个对象是否已经被保存!所以这里就必须重写equals和hashcode方法,而之所以equals方法那么长,其目的就是为了保证,不管你将来设置的组合主键是什么类型都能保证判断出两者是否一样。
追问 谢谢你详细,有条理的解答,但我还是不知道要怎么用代码实现增删概查操作,和那些单表或关联表的操作不同,那组合主键的两个属性都 不是 外键,没有和其他表关联的,你有这样的类似的代码让我研究一下吗?谢谢~
追答按上述配置完毕后,启动项目后(如果配置了hibernate自动建表),只会在数据库中生成一张表,这张表里有三个字段,分别就是tableId,contentId和partScore,所以对于这张表的增删改查也很简单,就是一个单表的增删改查,下边我拿保存来举例。保存的时候你只需要在程序里将CheckTableId对象中的两个属性set好值,然后再将设置好值的CheckTableId对象set给CheckTable对象中的id,同时也给partScore调用set方法设好值,这样CheckTable对象中的所有属性就封装好了,此时你只需要将这个对象传入DAO层,调用session.save(封装好的CheckTable对象实例)这个方法,就完成了向表中插入一条记录!删改查我就不再给你举例了,也很简单!
JAVA hibernate中删除表遇到主键被外键引用,违反完整约束条件,不能删除...
(方法1)将数据完整性约束交给Oracle处理 您测试一下,在sqlplus中,直接删除有子表记录的主表记录,如果能删除,可以不用在Hibernate中设置数据完整性。(方法2)将数据完整性约束交给Hibernate,在Hibernate设置好主子表关系,以及级联删除,这样就去除掉Oracle数据库中表的完整性约束,也就是不用设置子表...
hibernate 一对一 双向关联 级联保存,2个对象分别都insert到数据库表...
一对一有2种 一种是共享主键的关系 还有一种是唯一外键的关系。既然你说到外键没更新就是第二种关系 可能是你的配置文件没有写正确吧
数据库中两个表,一表中userid是主键,另个表中userId既主键又外键,我想...
update a set userid=1 from (select table1.userid from table1 join table2 on table1.userid=table2.userid)a
hibernate map 映射,key和value只能是一对一吗,一个key对应多个value怎 ...
再建立映射就行了.//关键要建立好关联关系的映射 当我们加载一个person类时,会加载这个person的属性setRecord 而setRecord是一个集合,我们可以从遍历集合里面取出这些联系记录.如果某个人的手机号码更改了,你要更新的不是person类,而是更新 联系记录类record类中的某个属性....
用Nhibernate怎么实现数据的添加,删除,修改简单程序
数据表:users 二、总体介绍 项目名:WebNhibernate 界面:WebForm.aspx 具体表现文件:WebForm.aspx.cs 实体类文件:EntityClass.cs 映射文件:Userhbm.xml 配置文件:Web.config 三、创建Web界面 类型 对象名 Text属性值 Label Label1 ID:Label Label2 姓名:Label Label3 密码:Label Label4 Email:...
...hibernate 一对一关联,怎么从前台获取到两个表的数据,还有在前台显 ...
你把懒加载设置为false,你就去查询主表,从表的数据Hibernate会一起查出来,然后你放在一个属性范围,在前台就可以拿出来的啊!
HQL语句 hibernate 单表怎么实现根据主键修改一个字段的值
...this.getHibernateTemplate().get(class, id);得到这个对象 然后set值,只要在set这个值之前没有关闭session那么会自动更新数据的,你下面截图写的update方法,update一个sql语句?
hibernate多对多关系从中间表中怎么一次性取得双方的数据
<many-to-many class="Teacher" column="tid">//Teacher与中间表关联的列 与Teacher主键关联 </set> --Teacher一方的配置文件-- <set name="students" table="stu_tea_info"(中间表的)> <key column="tid">//此处column值必须与上面<many-to-many class="Teacher" column="tid">处的...
在Hibernate数据库操作中,多对多关系是否需要建立中间表,若是要建...
中间表一般是联合主键 student_course --- sno CPK cno CPK sno引用student表的sno cno引用course表的cno
两个表的主键互为外键,这样就没法插入和删除数据了,是这样的吗,怎么解...
互为外键没有关系啊。前提是那个 “景区”表 的 “入口观察点” , 是要允许为 NULL 的。这样插入的顺序就可以操作了。先插入一个景区, 例如 “南京东路步行街”。 “入口观察点” 为 NULL 然后插入很多个 观察点, 例如 置地广场, 253广场, 名人商业大厦。(上面...