在弹簧投影中获取惰性属性
2022-09-03 03:03:16
我目前正在尝试评估使用Spring Data JPA的可能性。
尝试使用投影,我目前陷入了尝试获取特定属性 Eager 的困境。
我有一个简单的实体,它懒惰地引用另一个具有外键的实体。我现在想为前一个实体定义不同的预测。“基元”属性很好地投影到投影界面中,但尝试投影另一个实体/投影会导致它仍然被延迟加载。
我现在想告诉Spring/JPA,要热切地在投影中加载实体/投影。一种可能的方法是使用EntityGraphs(它们运行良好),但是我必须使用不同的图形为每个方法创建存储库。问题是还有哪些其他方法?
例:
实体买家:
@Entity
public class Buyer {
private Integer id;
private String someProperty;
private User user;
...
@OneToOne(
fetch = FetchType.LAZY)
@JoinColumn(
name = "CAB_USR_ID",
referencedColumnName = "ID",
updatable = false,
nullable = true,
foreignKey = @ForeignKey(name = "FK_CAB_USR"))
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
实体用户:
@Entity
public class User {
private Integer id;
private String name;
...
}
投影买家
public interface BuyerCProjection {
Integer getId();
UserProjection getUser();
}
投影用户
public interface UserProjection {
Integer getId();
String getName();
}
我想使用的存储库
public interface BuyerRepository extends Repository<Buyer, Integer> {
<T> List<T> findBy(Class<T> t);
}