Java JPA@manyToMany有条件
我有那些桌子: 用户:(用户id) 站点:(站点id,子站点) 用户站点:(用户id,站点id) 我想要一些像:Java JPA@manyToMany有条件,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我有那些桌子: 用户:(用户id) 站点:(站点id,子站点) 用户站点:(用户id,站点id) 我想要一些像: @ManyToMany(fetch = FetchType.LAZY) @JoinTable( name = "user_site", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJo
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "user_site",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "site_id", referencedColumnName)
@Where(clause = "site.subsite = false")
private Collection<Site> sites;
@ManyToMany(fetch=FetchType.LAZY)
@可接合(
name=“user\u站点”,
joinColumns=@JoinColumn(name=“user\u id”,referencedColumnName=“id”),
inverseJoinColumns=@JoinColumn(name=“site\u id”,referencedColumnName)
@其中(第条=“site.subsite=false”)
私人收藏地点;
但是这不起作用。我可以在站点选择上添加一个约束吗?比在SQL级别上进行过滤更好,我建议您在Java中使用特定集合的重写getter在HQL级别上进行过滤 以下是示例(未经测试):
public List getList(布尔子网站){
条件c=sessionFactory.getCurrentSession().createCriteria(Site.class);
c、 添加(限制.eq(“站点.子站点”,子站点);
返回(列表)c.List();
}
与在SQL级别上进行过滤相比,我建议您在Java中使用覆盖的getter对特定集合进行HQL级别的过滤
以下是示例(未经测试):
public List getList(布尔子网站){
条件c=sessionFactory.getCurrentSession().createCriteria(Site.class);
c、 添加(限制.eq(“站点.子站点”,子站点);
返回(列表)c.List();
}
当您尝试将这样的实体写回数据库时会发生什么?当您尝试将这样的实体写回数据库时会发生什么?
public List getList(boolean subsite) {
Criteria c = sessionFactory.getCurrentSession().createCriteria(Site.class);
c.add(Restrictions.eq("site.subsite", subsite);
return (List<Site>) c.list();
}