Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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 休眠:@单向@manytone-to-child实体上的@Filter不工作_Java_Hibernate_Jpa - Fatal编程技术网

Java 休眠:@单向@manytone-to-child实体上的@Filter不工作

Java 休眠:@单向@manytone-to-child实体上的@Filter不工作,java,hibernate,jpa,Java,Hibernate,Jpa,我试图使用Hibernate的@Filter注释来过滤“父”实体的“子”实体。但是,我只使用了一个单向@manytone映射(第二个实体中没有@OneToMany),并且我不是通过主键(id列)进行映射,而是通过另一个“assetClass”列进行映射 我总是遇到一个例外,即找到了多个子实体: org.hibernate.HibernateException: More than one row with the given identifier was found 实体 我通过DAO加载的主

我试图使用Hibernate的@Filter注释来过滤“父”实体的“子”实体。但是,我只使用了一个单向@manytone映射(第二个实体中没有@OneToMany),并且我不是通过主键(id列)进行映射,而是通过另一个“assetClass”列进行映射

我总是遇到一个例外,即找到了多个子实体:

org.hibernate.HibernateException: More than one row with the given identifier was found
实体

我通过DAO加载的主要实体包含单向映射、过滤器定义以及映射上的过滤器:

    @Entity
    @Table(name = "ASSETS")
    @FilterDef(name="activeControlsOnly", 
    parameters=@ParamDef(name="currentDate", type="date"))
    public class Asset {

    @Id
    @Column(name = "ASSET_ID")
    private Long id;

    @Column(name = "ASSET_CLASS")
    private String assetClass;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "ASSET_CLASS", referencedColumnName = "ASSET_CLASS", insertable = false, updatable = false)
    @Filter(name="activeControlsOnly", condition="validFrom <= :currentDate and validTo > :currentDate")
    private Control control;

}
@Entity
@Table(name = "CONTROLS")
public class Control {

    @Id
    @Column(name = "CONTROL_ID")
    private Long id;

    @Column(name = "ASSET_CLASS")
    private String assetClass;

    @Column(name = "VALID_TO")
    private Date validTo;

    @Column(name = "VALID_FROM")
    private Date validFrom;
}
还有我的刀:

public class AssetDao {

    @PersistenceContext
    private transient EntityManager entityManager;

    public List<AssetEntity> loadAssets(Date theDate, ...) {

        entityManager.unwrap(Session.class).enableFilter("activeControlsOnly").setParameter("currentDate", theDate);

        TypedQuery<Asset> query = entityManager.createQuery("from Asset where ...", Asset.class);

        return query.getResultList();
    }
}
公共类资产dao{
@持久上下文
私有临时实体管理器;
公共列表加载资产(日期,…){
entityManager.unwrap(Session.class).enableFilter(“activeControlsOnly”).setParameter(“currentDate”,theDate);
TypedQuery query=entityManager.createQuery(“从资产中…”,资产.class);
返回query.getResultList();
}
}
我已经尝试过在控制实体中另外(甚至代替)设置Filter和FilterDef,但没有成功。这可能吗?我能做什么


谢谢你的帮助

还有一点需要注意:我不能也不想在双向映射中进行转换,因为我有数千个资产实体,只有少数几个控件。所以我不希望每个资产都包含在一个控件中。