2013-10-12 156 views
0

我有兩個實體bean:JPQL特殊查詢

@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來做到這一點?

回答

0

可以使用entityManager.getReference()方法。你的情況:

entityManager.getReference(User.class, userId); 

這不會執行任何數據庫查詢,但會給你只填入ID的User實例,可以傳遞給commentObject.setUser()

+0

你是什麼意思?它不執行任何數據庫查詢,所以它如何從數據庫中獲取數據?我應該查詢數據庫從數據庫中獲取用戶,即使代表自己... – Mehdi

+0

'getReference()'不需要執行數據庫查詢來創建只有ID的實例。這是足夠的,因爲'commentObject'只需要用戶ID。試一試。 – MattR