java - Hibernate:如何根据作为关联映射一部分的外键列选择单个项目?

标签 java hibernate hibernate-mapping

你好, 所以...我有以下对象:

public class Person {
   // some other getters/setters omitted.
   void setAddress(Address addy) {
       // omitted
   }

   Address getAddress() {
       // omitted
   }
}

public class Address {
   Integer getId() {
      // omitted
   }
}

而且,我有以下 hibernate 映射:

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>

    <many-to-one name="address" 
        column="addressId" 
        unique="true"
        not-null="true"/>
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
</class>

因此,存在从 Person 的一对一映射至 Address , PersonAddress 的外键.


我想做的是获取 Person来自给定 Address 的对象ID...但我似乎无法找出正确的 HQL 语法:

public Person getPersonFromAddress(Address address) {

    Query query = this.session.createQuery("select p from Person as p where p.address_id = " + address.getId());

    @SuppressWarnings("unchecked")
    Person p = (Person)query.uniqueResult();

    return p;
}

我知道我没有从外键列到 Person 属性的映射。每次我尝试添加一个时,我都会收到一个异常,说我使用了同一列两次?我看不出这有什么问题 :)。

无论如何,获取给定地址的人的最佳方式是什么?任何帮助将不胜感激。

最佳答案

你应该可以做到这一点

Query query = this.session.createQuery("select p from Person as p where p.address=:address")
            .setParameter("address",address); 

关于java - Hibernate:如何根据作为关联映射一部分的外键列选择单个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6320400/

相关文章:

Spring Security + JPA 用户架构

java - 在hibernate注释中映射超过2个表

java - 使用 pom-packaging maven 项目作为依赖

java - 类的不同实现

java - 如何找到两个日期之间的周末数

java - 如何在 hibernate-5 中使用自定义表顺序?

java - 从 Eclipse Luna 卸载 JBoss Tools 4.3.0 Final (Hibernate)

hibernate - 要映射没有主键的数据库 View ,在 hibernate xml 映射中

hibernate - 如何在Grails中更改 map 的映射

java - Google Firebase 方法 onDataChange() 未调用