【问题标题】:JPQL Special QueryJPQL 特殊查询
【发布时间】:2013-10-12 13:31:29
【问题描述】:

我有两个实体 bean:

@Entity
public class User {
   @Id
   @GeneratedValue
   private Long id;
   @OneToMany(mappedBy="user", cascade = CascadeType.ALL)
   private List<Comment> comments = new ArrayList<Comment>();

   //SOME OTHER CLASS VARIABLES
   //GETTERS AND SETTERS
}

我的评论类是这样的:

@Entity
public class Comment {
   @Id
   @GeneratedValue
   private Long id;

   private String title;
   private String content;

   @ManyToOne
   private User user

   //SOME OTHER CLASS VARIABLES
   //GETTERS AND SETTERS
}

现在我知道我可以从会话中获取用户对象并像这样为我的评论设置用户,以便能够使用 JPA 中的加入功能:

commentObject.setUser(TheSessionGrabedUserObject/UserObjectWhichHasFetchedFromDbUsingUserId);

但只要我有我的用户对象的 userId,我就不需要这样做。 我正在寻找一种将这个 foreignKey 插入到我的评论表中的方法,而无需从会话中获取用户对象,或者可能查询到数据库以首先获取它!

我将如何使用 JPQL 来做到这一点?

【问题讨论】:

    标签: spring hibernate jakarta-ee jpa jpql


    【解决方案1】:

    您可以使用entityManager.getReference() 方法。在你的情况下:

    entityManager.getReference(User.class, userId);
    

    这不会执行任何数据库查询,但会为您提供一个仅填充 ID 的 User 实例,您可以将其传递给 commentObject.setUser()

    【讨论】:

    • 它不执行任何数据库查询是什么意思,那么它是如何从数据库中获取数据的呢?我应该向 db 查询以从数据库中获取用户,即使代表自己...
    • getReference() 不需要执行数据库查询来创建仅具有 ID 的实例。这已经足够了,因为 commentObject 只需要用户 ID。试一试。
    猜你喜欢
    • 2019-04-18
    • 1970-01-01
    • 2020-06-08
    • 2017-03-10
    • 2013-11-13
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多