2013-10-12 3 views
0

У меня есть два компонента управления: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); 

, но до тех пор, как я идент для моего пользователя Object Мне не нужно это делать. Я ищу способ вставить этот foreignKey в мою таблицу комментариев, не получая Пользовательский объект из сеанса или, возможно, запрос к базе данных, чтобы получить его первым!

как я буду делать это с помощью JPQL?

ответ

0

Вы можете использовать метод entityManager.getReference(). В вашем случае:

entityManager.getReference(User.class, userId); 

Это не будет выполнять никакой БД запроса, но даст вам User экземпляр только с идентификатором заселенным, и вы можете передать, что commentObject.setUser().

+0

Что вы подразумеваете под этим? Он не выполняет какой-либо запрос db, так как он извлекает данные из базы данных? Я должен запросить db для извлечения пользователя из базы данных, даже если сам от себя ... – Mehdi

+0

'getReference()' не нужно выполнять запрос БД для создания экземпляра только с идентификатором. Этого достаточно, поскольку для 'commentObject' нужен только идентификатор пользователя. Попробуйте. – MattR

Смежные вопросы