我想让我的实体实现某个接口,该接口返回 id:
public interface IdentifiableEntity<T extends Comparable<T>> {
public T getIdentifier();
}
但是,如果我这样做并且实体是延迟加载的,则getIdentifier()
初始化代理(并导致单独的选择)。这是一个示例实体:
@Entity
public class AppFile implements IdentifiableEntity<Long> {
@Id
@GeneratedValue
private Long id;
public Long getIdentifier() {
return id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
...
}
有没有办法告诉 Hibernate/JPAgetIdentifier()
只访问众所周知的 ID 而不需要初始化代理?
我已经发现:
- 当我注释属性(getter)而不是所有字段时,
getId()
不会初始化代理。 @Access(AccessType.PROPERTY)
在它上面使用private Long id;
将表现为 1. 不需要在属性级别上注释所有内容。
更新: 1. 和 2. 都不满足我的要求,即:
getIdentifier()
返回没有代理初始化的id- 该字段
id
不会更改其名称(因为有很多现有的 JPQL 语句)。