Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA@manyToMany有条件_Java_Spring_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java JPA@manyToMany有条件

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

我有那些桌子:

用户:(用户id)

站点:(站点id,子站点)

用户站点:(用户id,站点id)

我想要一些像:

@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();
}