这些天做公司的项目,用的是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的中关系映射分为一对一、一对多、多对一、多对多,其中有单双向之分。而一对一还有主键和外键区分。一共是九种。分别用xml配置文件和annotation实现。annotation的版本没有写测试程序,见谅。
hibernate核心,一对多,多对多映射讲解,看了就完全搞明白了
刚学完了hibernate和ejb,自己又自学了下jpa,看了黎活明老师的视频,自己做了个多对多的例子,希望可以对你学习有所帮助,有心人可以联系我QQ770256061!
最终,像Hibernate这样的ORM框架开始在开发领域得到认可,并且对它们的需求也在增加,因此JCP开始制定JPA规范。 像Servlet和JSP一样,JPA是一个规范。 实际运行JPA需要参考实现(RI)。 JPA参考实现有几种选择。 ...
JPA2映射的神秘之旅,介绍JPA的标准规范以及注解声明的使用,对已如何做一对多,多对一有详细的说明!
关于Hibernate的基本知识,有关关联映射,二级缓存,一对多,多对一,HQL查询等等.
JPA是一个新的类似Hibernate的持久化规范,它已经成为Java EE5规范的一部分。JPA使用Java 5的注解(annotation)来控制将单纯Java类(POJO对象)映射到数据库中的表。MyEclipse的JPA工具提供了功能强大的生成和...
jpa出现短短一年不到时间,已经有29%的市场占有率,JPA也是对数据库的操作,它的优势是sun公司出品的,而且可以集成hibernate,不用谢映射表,我上传了一张JPA的生命周期图,供大家配合java-ee的api自学JPA用
7.1.2 一对一的外键关联 7.1.3 用联结表映射 7.2 多值的实体关联 7.2.1 一对多关联 7.2.2 多对多关联 7.2.3 把列添加到联结表 7.2.4 映射map 7.3 多态关联 7.3.1 多态的多对一...
Alura-Java和JPA课程:使用JPA2和Hibernate持久化对象 这是我在课程之后开发的代码。 我已经对原始版本进行了一些更改。 内容 JPA和Hibernate简介 使用数据库 面向对象范式 在Java代码中避免使用SQL JDBC和SQL维护...
要是你对 Hibernate 或 TopLink 的 Criteria API 不熟悉的话,可以将它想像成一个以 Java 为中心的面向对象,线程安全并可以与 JPQL 划上等号的一组 API .这组 API 适合于编写复杂的动态查询语句,还可避免解析 JPQL...
是一款面向对象的ORM框架,JPA不需要关心数据库字段,通过注解将数据库表与实体完成映射,在java中的操作只需要对实体进行操作即可。 什么是ORM? ORM(Object-Relational Mapping) 表示对象关系映射。在面向对象...
SpringBoot是一款基于Spring框架的开发框架,而Spring-data-JPA是在Hibernate的基础上实现JPA规范的ORM框架。使用SpringBoot和Spring-data-jpa进行分页查询可以大大简化编码流程并提高开发效率。 在使用Spring-data...
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装。 hibernate劣势 难以使用数据库的一些功能 满足不了程序对cache的需求 耦合度高 debug难 hibernate更新大批量
对数据库的操作无非就“增删改查”。就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写...Spring-data-jpa的出现正可以让这样一个已经很“薄”的数据访问层变成只是一层接口的编写方式。
一对一 一对多/多对一 多对多 嵌入式 辅助表 遗产 懒惰抓取 查询 JPQL 命名查询 Spring数据 本机 SQL 乐观锁 复合键(进行中) 去做 添加复合键的更多示例 添加三元键的例子 以上两者混合关联 用户类型(包括 ID ...
Hibernate注释大全收藏 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id) { this.id...一对一 使用 @OneToOne...
JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中,图 1很好地描述了JPA的结构: Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用的对象持久...
持久化上下文大体内容:1、ORM元数据,JPA支持annotion(注解)或xml两种形式描述对象/关系映射 2、实体操作API,实现对实体对象的CRUD操作 3、查询语言,约定了面向对象的查询语言JPQL(javaPersistence Query ...
* @OneToMany 设置一对多关联。cascade属性指定关联级别,参考@OneToOne中的说明。fetch指定是否延迟加载,值为FetchType.LAZY表示延迟,为FetchType.EAGER表示立即加载 * 方法一 使用这种配置,在为“一端”添加“多...