这些天做公司的项目,用的是springside3的hibernate3.3的jpa映射给我出了不少的难题,但最终都能圆满解决了,其中最难搞定的就是一对一的映射关系,最初我想使用双向一对一,但是由于主表的主键是自动生成,而从表的主键要和主表的主键保持一致,即主键对主键的一对一,结果发现级联保存的时候老是报从表的id为null,由于要继承IdEntity方便管理所以所有的id字段统一的在IdEntity中映射进来,本人菜鸟改了还几次从表的生成策略想要从表的主键依赖外键生成,均没有成功多以决定换一种方法来映射,经多方查阅资料,在从表用manyToOne模拟oneToOne,即在从表中加入一个对应主表id的字段,然后让从表的id自动生成,就能正确存入,但是问题紧跟着又来了,不管我主表或是从表中声明referencedColumnName=“从表中对应主表的id字段”,都没用,hibernate还是会按照主键对主键的方式去查找,所以这次是能存不能查了,最后,绕了一圈又回来了,在从表中还是使用oneToOne,只不过是多声明了一句@joinCilumn(name=“从表中对应主表的id字段”)就OK了。
主表:
@OneToOne(cascade = { CascadeType.ALL }, mappedBy = "irrBuRegionalism")
@PrimaryKeyJoinColumn(referencedColumnName = "reg_id")
public IrrBuRegionalismSdate getIrrBuRegionalismSdate() {
return irrBuRegionalismSdate;
}
从表:
@OneToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinColumn(name = "reg_id")
public IrrBuRegionalism getIrrBuRegionalism() {
return irrBuRegionalism;
}
纠正一点错误,今天测试项目发现又不级联查询从表了,仔细检查了打出来的sql语句,发现还是会用主表的主键来对应从表的主键形成一对一,所以老是查出来的从表对象为空,最后发现问题出在@PrimaryKeyJoinColumn(referencedColumnName = "reg_id")这句话上,改成@JoinColumn(name = "reg_id")和从表一样就OK了。
分享到:
相关推荐
Hibernate JPA(Java Persistence API)是Java平台上的一个标准,用于管理和持久化应用程序中的对象。它提供了一种在Java应用和关系数据库之间进行数据映射的方法,使得开发者可以使用面向对象的方式来操作数据库,...
在本主题中,我们将深入探讨使用Hibernate注解来实现JPA的一对多、多对多和多对一的关系映射。 1. **一对多关系**: 在现实世界中,一个老师可以教多个学生,或者一个班级可以包含多个学生,这就是典型的一对多...
在Java世界中,Hibernate JPA(Java Persistence API)是一种广泛使用的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。本压缩包包含的文件是进行Hibernate JPA开发所需的核心库,让我们...
在IT行业中,构建一个完整的Web应用常常涉及到多个技术的整合,本示例中提到了"HibernateJPA+Struts2.0+MariaDB"的组合,这是一个经典的Java Web开发架构,用于实现用户登录功能。接下来,我们将深入探讨这些技术...
2. **实体关系(Entity Relationships)**:实体之间可以通过一对多、多对一、一对一、多对多等关系进行关联,这些关系由@OneToMany、@ManyToOne、@OneToOne、@ManyToMany注解来定义。 3. **持久化(Persistence)*...
【描述】在IT领域,Hibernate是一个广泛使用的对象关系映射(ORM)框架,而Java Persistence API (JPA)是Java平台上的一个标准,用于管理和持久化Java应用程序中的对象。这个实例是关于如何在实际项目中结合使用...
5. **关联管理**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)的关系映射,以及懒加载(lazy loading)和即时加载(eager loading)策略。 6. **查询API**:除了...
Hibernate是最早的ORM框架之一,后来成为了JPA的一个实现。Hibernate JPA提供了JPA规范的全部功能,并且在JPA的基础上扩展了一些特性,如更强大的 Criteria 查询、HQL(Hibernate Query Language)等。Hibernate JPA...
JPA是一个Java标准,旨在简化Java应用中实体对象与数据库表之间的映射关系,而Hibernate则是这一规范的具体实现之一。 - **Hibernate Core**: Hibernate的核心实现,负责处理对象与关系数据之间的转换。 - **...
在Java开发中,Hibernate是一个广泛使用的对象关系映射(ORM)框架,而Java Persistence API (JPA) 是Java平台上的标准ORM规范。两者结合,可以让开发者轻松地将数据库表与Java类进行绑定,从而实现数据的CRUD操作。...
而Hibernate作为一款强大的对象关系映射(ORM)工具,使得开发者可以更方便地操作数据库。JPA(Java Persistence API)是Java平台上的一个标准,它定义了ORM的API。JPA2是其第二个主要版本,引入了许多改进和新特性...
总的来说,基于Hibernate JPA的开发模式结合MyEclipse 10、JDK 1.7和MySQL,能够提供一个高效、灵活且易于维护的开发环境。通过对JPA深入理解并熟练运用,开发者可以快速构建出功能强大的企业级应用。在实践中,不断...
`hibernate-jpa-2.1-api-1.0.0.final.jar`是Hibernate对JPA 2.1规范的实现库,它使得开发者能够使用Hibernate的高效功能同时遵循JPA规范。 **1. Hibernate与JPA的关系** Hibernate最初作为一个独立的ORM框架,后来...
4. **关系映射**:JPA支持一对一、一对多、多对一和多对多的关系映射,如@OneToOne、@OneToMany、@ManyToOne和@ManyToMany。 5. **Repository接口**:通过定义自定义的Repository接口,可以扩展JPA的功能,比如实现...
这些jar包包含了对JPA规范的实现、Hibernate ORM框架的核心功能以及相关的依赖库。以下将详细介绍这些jar包及其对应的知识点。 1. **Hibernate JPA**: JPA是Java平台上的一个标准接口,它定义了如何在Java应用程序...
JPA是一个规范,而Hibernate是JPA的一个实现。这意味着你可以使用JPA的API来编写代码,而具体的数据访问逻辑则由Hibernate这样的提供商来处理。JPA提供了规范化的编程模型,包括注解和XML配置,使得开发者可以更专注...
5. **实体关系**:支持一对一、一对多、多对一、多对多等各种关系映射。 6. **事件和回调**:可以通过监听器在特定操作前后执行自定义逻辑。 7. **延迟加载**(Lazy Loading):只在真正需要时才加载关联数据,...
JPA提供了一种对象/关系映射(ORM)框架,将面向对象的程序设计与关系数据库的结构进行了解耦。 2. **Hibernate JPA的扩展性**:Hibernate是JPA的一个实现,以其强大的功能和灵活性赢得了广泛认可。Hibernate JPA ...
本实例将深入探讨如何在Hibernate中实现主键级别的单向一对一映射。 首先,我们理解一对一映射的基本概念。在数据库设计中,一对一映射通常发生在两个表的主键之间,其中一个表的主键是另一个表的外键。在Hibernate...
Hibernate是Java领域一个流行的Object-Relational Mapping (ORM)工具,而JPA是Java标准,用于在Java应用中管理关系数据库。它们一起提供了面向对象编程与关系数据库之间的桥梁,简化了数据持久化的过程。 描述提到...