java - Hibernate - 使用一个 hibernate 映射查询多个表

标签 java sql hibernate mapping hbm

我确实有一个 hibernate 映射,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="org.lwl.anlei.bl.model.imp">  

   <class name="PersonFo">
     <id name="id" type="integer"/>     
     <property name="name" type="string"/>
     <property name="info" type="string"/>
   </class> 

  <sql-query name="person1">
    <return alias="gb" class="PersonFo"/>
    SELECT id          as {gb.id},
           name        as {gb.name},
           info        as {gb.info}
    FROM   table
    WHERE  field1 = :param
  </sql-query>

  <sql-query name="person2">
    <return alias="gb" class="PersonFo"/>
    SELECT id          as {gb.id},
           second_name as {gb.name},
           whatever    as {gb.info}
    FROM   table
    WHERE  field2 = :param
  </sql-query>

</hibernate-mapping>

这是我所拥有的简单的 hbm。 在Java中,我通过“getQueryName”以这种方式获取数据:

List<Person> myPersons =
    session.getNamedQuery("person1").setString("param", "important text").list();

现在我必须使用 View ,而不是这些查询。我知道,我可以简单地将“SELECT xxx FROM view_person1”和“SELECT xxx FROM view_person2”写入sql查询,但我更喜欢使用这样的东西:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="org.lwl.anlei.bl.model.imp">  

   <class name="PersonFo" 
    table="view_person1"
    entity-name="view_person1" >
     <id name="id" column="id" type="integer"/>     
     <property name="name" column="name" type="string"/>
     <property name="info" column="info" type="string"/>
   </class> 

   <class name="PersonFo" 
    table="view_person2"
    entity-name="view_person2" >
     <id name="id" column="id" type="integer"/>     
     <property name="name" column="name" type="string"/>
     <property name="info" column="info" type="string"/>
   </class> 

</hibernate-mapping>

在另一个例子中,我看到了如何通过这种方式通过 hibernate 保存数据。 Map Two Identical tables ( same schema...) to same entity in Hibernate

他们只是使用:

_session.Save("view_person1", xxxx) 
_session.Save("view_person2", xxxx)

但是,我如何查询数据?有没有类似的东西:

List<Person> myPersons =
    session.getNamedEntity("view_person2").list();

非常感谢您的帮助! 谢谢!

最佳答案

使用polymorphism="explicit"来区分您的命名实体:

<class name="PersonFo" 
    table="view_person1"
    entity-name="view_person1" polymorphism="explicit" >
     <id name="id" column="id" type="integer"/>     
     <property name="name" column="name" type="string"/>
     <property name="info" column="info" type="string"/>
   </class> 

   <class name="PersonFo" 
    table="view_person2"
    entity-name="view_person2" >
     <id name="id" column="id" type="integer"/>     
     <property name="name" column="name" type="string"/>
     <property name="info" column="info" type="string"/>
   </class> 

并查询您的命名实体,如下所示:

List list1 = session.createQuery("from view_person1").list();
List list2 = session.createQuery("from view_person2").list();

关于java - Hibernate - 使用一个 hibernate 映射查询多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26144762/

相关文章:

java - 对应类型树

java - 当 'ACE' 牌出现在我的二十一点游戏手中时,我的算法出现问题

java - 如何使用内置的 AlertDialog_listItemLayout

SQL如何在单元格的值大于0时求平均值

java - 如何使用 Hibernate 将 `null` 值插入数据库?

java - 在运行时禁用/忽略事务拦截器

SQLite COUNT 和 LEFT JOIN - 如何结合?

php - 递归获取 parent 姓名

java - Hibernate 更改某行代码得到明显的死锁

Hibernate 拦截器获取与加载