什么意思" p"在select p ...声明中?

时间:2015-01-27 17:24:00

标签: java hibernate hql

private void addPersonToEvent(Long personId, Long eventId) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();

    Person aPerson = (Person) session
            .createQuery("select p from Person p left join fetch p.events where p.id = :pid")
            .setParameter("pid", personId)
            .uniqueResult(); // Eager fetch the collection so we can use it detached
    Event anEvent = (Event) session.load(Event.class, eventId);

    session.getTransaction().commit();

这段代码来自hibernate参考。我不明白这是什么意思?#34;选择p" SQL语句。什么是" p"?

2 个答案:

答案 0 :(得分:3)

它只是您将用于查询特定实体的别名。这些别名用于JPQL / HQL。这将被视为实体,您可以使用(点)来引用实体中的字段。

答案 1 :(得分:1)

这是Hibernate查询语言或HQL,它不应该像你正在做的那样被读作普通的SQL。

P是要返回的实体的别名。

HQL查询(不是SQL)的基本解释:

select p -- the entity to retrieve
from Person p -- Person entity aliased p
left join fetch p.events -- left join with entity Events, check the entity mapping between Person and Event entities
where p.id = :pid -- p.id is the field id from Person entity, :pid is a named parameter called pid

有关详细信息,请参阅Hibernate HQL documentation