Java 休眠:@单向@manytone-to-child实体上的@Filter不工作
我试图使用Hibernate的@Filter注释来过滤“父”实体的“子”实体。但是,我只使用了一个单向@manytone映射(第二个实体中没有@OneToMany),并且我不是通过主键(id列)进行映射,而是通过另一个“assetClass”列进行映射 我总是遇到一个例外,即找到了多个子实体: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加载的主
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,但没有成功。这可能吗?我能做什么
谢谢你的帮助 还有一点需要注意:我不能也不想在双向映射中进行转换,因为我有数千个资产实体,只有少数几个控件。所以我不希望每个资产都包含在一个控件中。