0 0

Hibernate多态查询5

我的代码有问题,直接查询子类可以,但是通过父类查询子类就不行无法正确执行查询,请教大家!
hbm.xml文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.edu.buaa.software.lee.hibernate.helloworld.domain">

<class name="BillingDetails" abstract="true">

<id name="id" column="BILLING_DETAILS_ID" type="long">
<generator class="native">
<param name="sequence">SEQ_BILLING_DETAILS</param>
<param name="parameters">INCREMENT BY 1 START WITH 1</param>
</generator>
</id>
<property name="owner" column="OWNER" type="string"/>
<!--union-subclass方式!-->
<union-subclass name="CreditCard" table="TB_CREDIT_CARD">
<property name="number" column="`NUMBER`" type="string" />
<property name="expMonth" column="`EXP_MONTH`" type="string"/>
<property name="expYear" column="`EXP_YEAR`" type="string" />
</union-subclass>

<union-subclass name="BankAccount" table="TB_BANK_ACCOUNT">
<property name="account" column="ACCOUNT" type="string"/>
<property name="bankName" column="BANK_NAME" type="string"/>
<property name="swift" column="SWIFT" type="string"/>
</union-subclass>
</class>
</hibernate-mapping>
Java代码:
public static void main(String[] args) {

Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();

BankAccount bAccount = new BankAccount();
bAccount.setOwner("Owner Of BankAccount");
bAccount.setAccount("Account");
bAccount.setBankName("BankName");
bAccount.setSwift("Swift");
session.save(bAccount);

CreditCard cCard = new CreditCard();
cCard.setOwner("Owmer Of CreditCard");
cCard.setNumber("Number");
cCard.setExpYear("Year");
cCard.setExpMonth("Month");
session.save(cCard);

transaction.commit();
session.close();


Session newSession = HibernateUtil.getSession();
Transaction newTransaction = newSession.beginTransaction();

// Query query = newSession.createQuery("FROM CreditCard");
// List<BillingDetails> bDetails = query.list();
// System.out.println("Number of CreditCard: " + bDetails.size());

// Query query = newSession.createQuery("FROM BankAccount");
// List<BillingDetails> bDetails = query.list();
// System.out.println("Number of BankAccount: " + bDetails.size());

Query query = newSession.createQuery("from BillingDetails");
List<BillingDetails> bDetails = query.list();
System.out.println("Number of BillingDetails: " + bDetails.size());

newTransaction.commit();
newSession.close();

HibernateUtil.shutdown();
}
2009年7月23日 16:01

1个答案 按时间排序 按投票排序

0 0

如果不需要支持多态查询和多态关联,可以采用每个具体类对应一个表的映射方式,如果需要支持多态查询和多态关联,并且子类包含的属性不多,可以采用根类对应一个表的映射方式,如果需要支持多态查询和多态关联,并且子类包含的属性很多,可以采用每个类对应一个表的映射方式。如果继承关系树中包含接口,可以把它当做抽象类来处理。

所以:把两个子类映射到一张表上试试。

2009年7月24日 13:46

相关推荐

    hibernate的多态查询

    NULL 博文链接:https://zhangxing119.iteye.com/blog/1197255

    Hibernate加载方式与多态加载分析

    自己研究的hibernate加载方式和多态加载的分析. 写的不好,不过可以供深入者确切体会hibernate的种种功能的本质

    Hibernate HQL查询.docx

    Hibernate 配备了一种非常强大的查询语言,这种语言看上去很像 SQL。但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的概念。

    Hibernate实战(第2版 中文高清版)

    第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不...

    HQL Hibernate查询语言

    Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。

    Hibernate+中文文档

    14.7. 多态查询 14.8. where子句 14.9. 表达式 14.10. order by子句 14.11. group by子句 14.12. 子查询 14.13. HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     17.1.6 多态查询  17.1.7 对查询结果排序  17.1.8 分页查询  17.1.9 检索单个对象(uniqueResult()方法)  17.1.10 按主键逐个处理查询结果(iterate()方法)  17.1.11 可滚动的结果集  17.1.12 在HQL查询...

    hibernate3.2中文文档(chm格式)

    14.7. 多态查询 14.8. where子句 14.9. 表达式 14.10. order by子句 14.11. group by子句 14.12. 子查询 14.13. HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria ...

    Hibernate查询语言(HQL)

    Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。

    HibernateAPI中文版.chm

    14.7. 多态查询 14.8. where子句 14.9. 表达式 14.10. order by子句 14.11. group by子句 14.12. 子查询 14.13. HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria ...

    hibernate中文帮助及语法配置

    详细的介绍hibernate的所有配置映射、事务、xml的配置、多态查询、关联等核心中文帮助,提供源代码参考

    Hibernate 中文 html 帮助文档

    14.7. 多态查询 14.8. where子句 14.9. 表达式 14.10. order by子句 14.11. group by子句 14.12. 子查询 14.13. HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) 15.1...

    Hibernate中文详细学习文档

    14.7. 多态查询 14.8. where子句 14.9. 表达式 14.10. order by子句 14.11. group by子句 14.12. 子查询 14.13. HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria ...

    最全Hibernate 参考文档

    14.6. 多态查询 14.7. where子句 14.8. 表达式 14.9. order by子句 14.10. group by子句 14.11. 子查询 14.12. HQL示例 14.13. 批量的UPDATE & DELETE语句 14.14. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) ...

    hibernate中文教材

    Hibernate是一种强大的可提供对象-关系持久化和查询服务的中间件,它可以使程序员依据面向对象的原理开发持久化类,实现对象之间的关联、继承、多态、组合、集合等。 Hibernate提供了它特有的数据库查询语言HQL,...

    hibernate 体系结构与配置 参考文档(html)

    多态查询 14.8. where子句 14.9. 表达式 14.10. order by子句 14.11. group by子句 14.12. 子查询 14.13. HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria Queries) ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    14.7. 多态查询 14.8. where子句 14.9. 表达式 14.10. order by子句 14.11. group by子句 14.12. 子查询 14.13. HQL示例 14.14. 批量的UPDATE和DELETE 14.15. 小技巧 & 小窍门 15. 条件查询(Criteria ...

    hibernate 教程

    多态(polymorphism)查询 11.7. where子句 11.8. 表达式(Expressions) 11.9. order by 子句 11.10. group by 子句 11.11. 子查询 11.12. HQL示例 11.13. 提示和技巧(Tips & Tricks) 12. ...

    Hibernate教程

    15.6. 多态查询 15.7. where子句 15.8. 表达式 15.9. order by子句 15.10. group by子句 15.11. 子查询 15.12. HQL示例 15.13. 批量的UPDATE & DELETE语句 15.14. 小技巧 & 小窍门 16. 条件查询(Criteria ...

Global site tag (gtag.js) - Google Analytics