JPA 持久性和 Hibernate javassist 对象
JPA persistence and Hibernate javassist objects
我正在为一个项目使用 Play Framework v.1.2.6,当我尝试从数据库中检索对象时遇到对象休眠问题。
https://www.playframework.com/documentation/1.2.x/jpa
我有一个查询,它从 mysql table 中选择行,结果有代理对象。请看下图。
我没有使用任何 Hibernate 配置文件。我在我的模型中只使用@Annotations class.
我的查询示例:
static List<User> getAllUsersFromAccount(Account account) {
return User.find(
"SELECT u " +
"FROM User u " +
"WHERE u.account=?",
account).fetch();
}
有谁知道如何避免在查询结果中获取代理对象?
现在我们遍历用户数组并检查实体是否是 instanceof HibernateProxy。我们不想这样做,因为也许我们有同样的问题和其他查询。
private static <T> T initializeAndUnproxy(T entity) {
Hibernate.initialize(entity);
if(entity instanceof HibernateProxy) {
entity = (T)((HibernateProxy)entity).getHibernateLazyInitializer().getImplementation();
}
return entity;
}
您可以在 JPQL/HQL 查询中使用 JOIN FETCH 关键字。在您的示例中,如果您不想处理代理对象而不是真实的帐户对象,请添加 'JOIN FETCH u.account'
static List<User> getAllUsersFromAccount(Account account) {
return User.find(
"SELECT u " +
"FROM User u " +
"JOIN FETCH u.account " +
"WHERE u.account=?",
account).fetch();
}
我正在为一个项目使用 Play Framework v.1.2.6,当我尝试从数据库中检索对象时遇到对象休眠问题。 https://www.playframework.com/documentation/1.2.x/jpa
我有一个查询,它从 mysql table 中选择行,结果有代理对象。请看下图。
我没有使用任何 Hibernate 配置文件。我在我的模型中只使用@Annotations class.
我的查询示例:
static List<User> getAllUsersFromAccount(Account account) {
return User.find(
"SELECT u " +
"FROM User u " +
"WHERE u.account=?",
account).fetch();
}
有谁知道如何避免在查询结果中获取代理对象?
现在我们遍历用户数组并检查实体是否是 instanceof HibernateProxy。我们不想这样做,因为也许我们有同样的问题和其他查询。
private static <T> T initializeAndUnproxy(T entity) {
Hibernate.initialize(entity);
if(entity instanceof HibernateProxy) {
entity = (T)((HibernateProxy)entity).getHibernateLazyInitializer().getImplementation();
}
return entity;
}
您可以在 JPQL/HQL 查询中使用 JOIN FETCH 关键字。在您的示例中,如果您不想处理代理对象而不是真实的帐户对象,请添加 'JOIN FETCH u.account'
static List<User> getAllUsersFromAccount(Account account) {
return User.find(
"SELECT u " +
"FROM User u " +
"JOIN FETCH u.account " +
"WHERE u.account=?",
account).fetch();
}