hibernate 多对多 中间表不会更新? 5

Permision表:@ManyToMany(mappedBy="permisions",targetEntity=Role.class,cascade={Cascade... Permision表:

@ManyToMany(mappedBy="permisions",targetEntity=Role.class,cascade={CascadeType.MERGE,CascadeType.PERSIST}, fetch=FetchType.EAGER)
@JoinTable(name="role_permision",joinColumns=@JoinColumn(name="permision_id"),inverseJoinColumns=@JoinColumn(name="role_id"))
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public Set<Role> getRoles() {
return roles;
}
role 表:
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},targetEntity=User.class)
@JoinTable(name="user_role",joinColumns=@JoinColumn(name="role_id"),inverseJoinColumns=@JoinColumn(name="user_id"))
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public Set<User> getUsers() {
return users;
}
当我修改permision所绑定的role时,中间表不会产生或更新数据,找了好久都没解决这个问题,希望哪位大侠 解答一下,谢谢
role表:
@ManyToMany(fetch=FetchType.EAGER,targetEntity=Permision.class)
@JoinTable(name="role_permision",joinColumns=@JoinColumn(name="role_id"),inverseJoinColumns=@JoinColumn(name="permision_id"))
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public Set<Permision> getPermisions() {
return permisions;
}
permission表:
@ManyToMany(cascade={CascadeType.MERGE,CascadeType.PERSIST},fetch=FetchType.EAGER,targetEntity=Role.class,mappedBy="permisions")
@JoinTable(name="role_permision",joinColumns=@JoinColumn(name="permision_id"),inverseJoinColumns=@JoinColumn(name="role_id"))
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public Set<Role> getRoles() {
return roles;
}
注意role 和permission表都需要配置targetEntity,mappedBy单方配置;配置mappedBy的表用于维护中间表
展开
 我来答
query4j
2012-06-14
知道答主
回答量:38
采纳率:0%
帮助的人:18.9万
展开全部
哈哈,这分给我吧。
A AB B三张表的关系你懂的(多对多中间表AB),对应的类有a和b,
a里有b的set,b里有a的set.cascade都是all的。
上面的都是前提,下面说重点:
当你往a类的set中设置b类的数据,save(a)时,不会插入中间表AB,只是对应的插入了A和B,
如果你想插入AB的数据:
请在b的set中也把a设置进去。
那么就over了,插入后乘乘的送分吧。呵呵!
小破孩VS小傻妮
2012-06-11 · TA获得超过167个赞
知道小有建树答主
回答量:211
采纳率:100%
帮助的人:133万
展开全部
中间表只是维护关系,我看你的描述意思是:你修改了role的基本信息,但是关系表中的数据没有改变?你是说这个意思吗?如果是这样的话,你修改role那么只是对role做了修改操作,没有影响到和permision的关系。
如果我说的问题不是你所说的,请你描述一下,最好把你修改时维护关系的代码(对role保存前关系处理的那段)贴一下。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
般若兮若
2012-06-11 · TA获得超过2706个赞
知道小有建树答主
回答量:1246
采纳率:0%
帮助的人:938万
展开全部
joinColumns=@JoinColumn(name="permision_id",referencedColumnName="id")
加上referencedColumnName这个属性
inverseJoinColumns是中间表跟关系被维护端的外键映射信息;referencedColumnName是为了明确中间表中的外键字段跟被维护端的某字段关联
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式