hibernate多对多映射中间表有多余字段问题该如何映射
我有role(角色)表,power(权限)表,role_power表,role和power是多对多关系,role_power为中间表,我现在映射时出现问题了,role-p...
我有role(角色)表,power(权限)表,role_power表,role和power是多对多关系,role_power为中间表,我现在映射时出现问题了,role-power表中的字段有role_id(FK),power_id(FK)和ishasread普通字段,role-id和power_id是role_power表的联合主键,因为中间表有多余字段,那要怎么映射啊?用不了正常的多对多映射,我考虑映射成两个1对多的关系,但是要是这样的话role_power作为一的一方,它在hbm.xml文件中映射时要指定<id>,主键标签啊,我的表中并没有设计有唯一主键这项,那么这个问题该如何解决啊?类定义如下。
class Role_power calss Role class Power
{ { {
private Role role; private int role_id; private int power_id;
private Power power; private Set<Role_power> set; private Set<Role-power> set;
private int ishasread; //get,set省略 //get,set省略
//get,set省略
} } } 展开
class Role_power calss Role class Power
{ { {
private Role role; private int role_id; private int power_id;
private Power power; private Set<Role_power> set; private Set<Role-power> set;
private int ishasread; //get,set省略 //get,set省略
//get,set省略
} } } 展开
3个回答
展开全部
将多对多创建成两个一对多关系就行了。
你的中间表对象没有主键,第一种方式就是你为中间表增加一个主键,这个也是如果要把中间表映射成对象的推荐方式。
第二种方式就比较复杂,你需要在中间表对象里面再增加两个属性,int role_id,int power_id,用来映射你中间表中作为复合组件的两个外键,然后在Role_power对象中把role_id和power_id映射成compositeid,然后仍然把Role role和Power power两个属性映射成many2one,然后设置这两个属性对应的many-to-one的column为role_id和power_id,然后把这两个属性的insert="false" update="false",就可以了。这样就比较麻烦
还有一种就是你中间表就不要Role role和Power power,而直接把这两个对象改成int roleId,int powerId来映射。
你的中间表对象没有主键,第一种方式就是你为中间表增加一个主键,这个也是如果要把中间表映射成对象的推荐方式。
第二种方式就比较复杂,你需要在中间表对象里面再增加两个属性,int role_id,int power_id,用来映射你中间表中作为复合组件的两个外键,然后在Role_power对象中把role_id和power_id映射成compositeid,然后仍然把Role role和Power power两个属性映射成many2one,然后设置这两个属性对应的many-to-one的column为role_id和power_id,然后把这两个属性的insert="false" update="false",就可以了。这样就比较麻烦
还有一种就是你中间表就不要Role role和Power power,而直接把这两个对象改成int roleId,int powerId来映射。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询