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();
}