@ManyToOne配置延迟加载,如果是关联主键列,

    @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "billid", insertable = false,updatable = false, nullable = false)
private Bill bill ;
@Setter
@Getter
@Entity
@DynamicUpdate
@Table(name = "Bill")
public class Bill implements Serializable { /**
* 主键
*/ @Id
@Column(name = "ID")
private String id; @Column(name = "SID")
private String sid;
}

延迟加载是正常的。

但如果关联的Address的是sid而不是id的话,就延时加载就有问题。如下代码:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "billid", referencedColumnName = "sid", insertable = false,updatable = false, nullable = false)
private Bill bill;

这时的解决方案,需要了解PersistentAttributeInterceptable的机制。

@DynamicUpdate
@Entity
@Setter
@Getter
@Table ( name ="BillDETAIL" )
public class BillDetail implements PersistentAttributeInterceptable, Serializable {

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "billid", referencedColumnName = "sid", insertable = false,updatable = false, nullable = false)
@LazyToOne(LazyToOneOption.NO_PROXY)
private Bill bill; public Bill getBill() {
if (interceptor!=null) {
return (Bill)interceptor.readObject(this, "bill", bill);
}
return bill;
} public void setBill(BillView bill) {
if (interceptor!=null) {
this.billView = (Bill) interceptor.writeObject(this,"owner", this.bill,bill);
return ;
}
this.bill = bill;
} @Transient
private PersistentAttributeInterceptor interceptor; @Override
public PersistentAttributeInterceptor $$_hibernate_getInterceptor() {
return interceptor;
} @Override
public void $$_hibernate_setInterceptor(PersistentAttributeInterceptor interceptor) {
this.interceptor = interceptor;
} }

参考:

https://blog.csdn.net/johnf_nash/article/details/86557107

https://blog.csdn.net/windsigirl123/article/details/60957632

Jpa/Hibernate ManyToOne 关联非主键列 延迟加载失效的更多相关文章

  1. ThinkPHP关联模型如何关联非主键

    ThinkPHP关联模型默认是主键外键关联 官方并没有提供相关文档 如何实现非主键与非主键间之间的关联 <?php namespace Admin\Model; use Think\Model\ ...

  2. hibernate关联非主键注解配置

    现在有两张表:一张t_s_user用户表和t_s_user_serial_number用户序号表 CREATE TABLE `t_s_user` ( `id` ) NOT NULL, `email` ...

  3. yii之relations关联非主键

    yii的relations里self::BELONGS_TO默认是用当前指定的键跟关联表的主键进行join,例如: return array('reply' => array(self::BEL ...

  4. 关于hibernate非主键多对一关联

    一直以来,用hibernate做多对一时,关联的都是主键,今天,同事设计的表,关联的却不是主键,这下麻烦了,hibernate的many-to-one默认关联的都是主键,原来,hibernate提供了 ...

  5. Hibernate非主键关联

    一. 非主键关联,我们进行外键关联时,通常使用的是主键,但有时候需要使用到其他列时可以通过以下方法设置: 注解中:@JoinColumn(name="city", referenc ...

  6. Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 h ...

  7. Hibernate之:各种主键生成策略与配置详解

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

  8. java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询

    持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...

  9. Transactional Replication2:在Subscriber中,主键列是只读的

    在使用Transactional Replication时,Subscriber 被认为是“Read-Only”的 , All data at the Subscriber is “read-only ...

随机推荐

  1. 模板_LCA

    // luogu-judger-enable-o2 #include<bits/stdc++.h> #define maxn 1000002 //#define int long long ...

  2. BZOJ 1022 Luogu P4279 [SHOI2008]小约翰的游戏 (博弈论)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1022 (luogu) https://www.luogu.org/pro ...

  3. [BZOJ4804]欧拉心算:线性筛+莫比乌斯反演

    分析 关于这道题套路到不能再套路了没什么好说的,其实发这篇博客的目的只是为了贴一个线性筛的模板. 代码 #include <bits/stdc++.h> #define rin(i,a,b ...

  4. 关于判断StringBuffer是否为空

    对于String和StringBuffer来说,都是通过创建新的char value[]数组来达到字符串改变的操作的,只不过String是通过新创建String对象来达到目的, 而StringBuff ...

  5. scss 用法 及 es6 用法讲解

    scss 用法的准备工作,下载 考拉 编译工具 且目录的名字一定不能出现中文,哪里都不能出现中文,否则就会报错 es6 用法 let 和 const  let  声明变量的方式 在 {} 代码块里面才 ...

  6. python - MySQLdb 事务处理及批量执行executemany

    MySQL数据库有一个自动提交事务的概念,autocommit.含义是,如果开启autocommit, 则每一个语句执行后会自动提交.即一个语句视为一个事务. 在python使用的MySQLdb中,默 ...

  7. 关于maven项目 启动页面报错 The type java.io.ObjectInputStream cannot be resolved.

    这种情况,要修改jdk版本,默认jdk选择 jdk不选jre windows---->perference---->java----->installes jres-----> ...

  8. delphi : 窗体的close,free,destroy

    一.我用application.create(TForm2,Form2)语句,创建了Form2,可是调用了Form2.close后,重新调用Form2.show. 刚才所创建的Form2仍然存在.问为 ...

  9. Android下Native的so编译:使用cmakelists.txt

    android studio的CMakeLists.txt写好后,在Studio中编译没问题,在命令编译时则需要配置很多参数才能成功 示例CMakeLists.txt文件: cmake_minimum ...

  10. html的标签规范

    if/else标签{ % if condition1 %} ... display 1{ % elif conditon2 %} ... display 2{ % else % } ... displ ...