Java 如何避免任何FK实体加载,但仍在HQL中使用FK实体?
我有一个父实体DBParentEntity,它与FK实体DBForeignEntity有关Java 如何避免任何FK实体加载,但仍在HQL中使用FK实体?,java,hibernate,lazy-loading,Java,Hibernate,Lazy Loading,我有一个父实体DBParentEntity,它与FK实体DBForeignEntity有关 @Entity @Table(catalog = "my_schema", name = "my_table") public class DBParentEntity { ... private DBForeignEntity foreign; @ManyToOne @JoinColumn(name = "foreign_id", referencedColumnName
@Entity
@Table(catalog = "my_schema", name = "my_table")
public class DBParentEntity {
...
private DBForeignEntity foreign;
@ManyToOne
@JoinColumn(name = "foreign_id", referencedColumnName = "id")
public DBForeignEntity getForeign() {
return foreign;
}
public void setForeign(DBForeignEntity foreign) {
this.foreign = foreign;
}
}
如何避免加载FK实体,但仍在HQL中使用它?
我想用自己的缓存方法加载外部实体
private int foregnId;
@Basic
@Column(name = "foreign_id")
public int getForegnId() {
return foregnId;
}
public void setForegnId(int foregnId) {
this.foregnId = foregnId;
}
private DBForeignEntity foreign;
private boolean hasForeign;
@Transient
public DBForeignEntity getForeign() {
if (!hasForeign) {
initForeign();
}
return foreign;
}
@Transient
private synchronized void initForeign() {
if (hasForeign) return;
foreign = getFromCache(foregnId)
if (foreign!= null) hasForeign= true;
}
我可以删除@ManyToOne注释并用@Transient替换它,
但HQL的所有关系都将失败:
Query query = session.createQuery("from DBParentEntity parent where parent.!foreign!.more_foregn.some_field = :some_value ")