zhangzhenhuajack / spring-data-jpa-guide

spring-data-jpa-guide,Spring Data JPA实战,SpringDataJpa详解
http://www.jackzhang.cn/spring-data-jpa-guide/
379 stars 164 forks source link

Spring data JPA的hibernate中@OneToOne注解引起的N+1的sql问题如何解决 #35

Open zhangzhenhuajack opened 3 years ago

zhangzhenhuajack commented 3 years ago

实验Entity代码如下:

@Setter
@Getter
@EqualsAndHashCode(of = {"id"}, callSuper = true)
@Entity
@Table(name = "tpusers")
public class Tpuser e {
    private static final long serialVersionUID = 2299533081180191108L;
    private String name;
    private Integer gender;
    private String email;
    private Parent parent;
    private Teacher teacher;
    private List<ThirdPartyTpuser> thirdPartyTpusers;
    private Long id;

    @Id
    @Override
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return this.id;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "tpuser")
    public List<ThirdPartyTpuser> getThirdPartyTpusers() {
        return thirdPartyTpusers;
    }

    @OneToOne(mappedBy = "tpuser",fetch = FetchType.LAZY)// 在JPA里面 @OneToOne默认情况下 是EAGER模式,配置成lazy也是不起作用的
//    @LazyToOne(LazyToOneOption.NO_PROXY)//这个是字节码增强解决@OneToOne lazy的问题的,会产生N+1问题。
//    @Fetch(FetchMode.JOIN) //这个开不开是一样的效果
    public Parent getParent() {
        return parent;
    }

    @OneToOne(mappedBy = "tpuser")
  //    @LazyToOne(LazyToOneOption.NO_PROXY)//这个是字节码增强解决@OneToOne lazy的问题的,会产生N+1问题。
  //    @Fetch(FetchMode.JOIN)
    public Teacher getTeacher() {
        return teacher;
    }
}
@Getter
@Setter
@EqualsAndHashCode(of = "tpuser_id")
@Entity
@Table(name = "teachers")
@Include(rootLevel = true, type = "Teachers")
@Where(clause = "deleted = false")
public class Teacher {
    private Long areaId;
    private String address;
    private TeacherType type;
    private Tpuser tpuser;
    private Long id;

    @Id
    @Override
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return this.id;
    }
    @Enumerated(EnumType.STRING)
    public TeacherType getType() {
        return type;
    }

//    @LazyToOne(LazyToOneOption.NO_PROXY)//这个是字节码增强解决@OneToOne lazy的问题的,会产生N+1问题。
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "tpuser_id")
    public Tpuser getTpuser() {
        return tpuser;
    }
}
@Getter
@Setter
@Entity
@Table(name = "parents")
@Include(rootLevel = true, type = "Parents")
@EntityListeners(EntityChangeListener.class)
@Where(clause = "deleted = false")
public class Parent extends AbstractDeletedAuditBase {
    private String address;
    private Tpuser tpuser;
    private Long id;

    @Id
    @Override
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return this.id;
    }

//    @LazyToOne(LazyToOneOption.NO_PROXY) //这个是字节码增强解决@OneToOne lazy的问题的,会产生N+1问题。
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "tpuser_id", referencedColumnName = "id")
    public Tpuser getTpuser() {
        return tpuser;
    }
}

最终@OneToOne执行完之后打印的sql如下:

2021-09-15 18:13:44.052 DEBUG [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] org.hibernate.SQL                        : select tpuser0_.id as id1_24_0_, parent1_.id as id1_13_1_, teacher2_.id as id1_15_2_, tpuser0_.created_at as created_2_24_0_, tpuser0_.updated_at as updated_3_24_0_, tpuser0_.lock_version as lock_ver4_24_0_, tpuser0_.auto_generate as auto_gen5_24_0_, tpuser0_.email as email6_24_0_, tpuser0_.gender as gender7_24_0_, tpuser0_.invitation_code_group as invitati8_24_0_, tpuser0_.invited_by_code as invited_9_24_0_, tpuser0_.mobile_phone as mobile_10_24_0_, tpuser0_.mobile_phone_validated as mobile_11_24_0_, tpuser0_.name as name12_24_0_, tpuser0_.password_hash as passwor13_24_0_, tpuser0_.password_updated_at as passwor14_24_0_, tpuser0_.state as state15_24_0_, tpuser0_.uuid as uuid16_24_0_, parent1_.created_at as created_2_13_1_, parent1_.updated_at as updated_3_13_1_, parent1_.lock_version as lock_ver4_13_1_, parent1_.deleted as deleted5_13_1_, parent1_.deleted_at as deleted_6_13_1_, parent1_.address as address7_13_1_, parent1_.state as state8_13_1_, parent1_.tpuser_id as tpuser_i9_13_1_, teacher2_.created_at as created_2_15_2_, teacher2_.updated_at as updated_3_15_2_, teacher2_.lock_version as lock_ver4_15_2_, teacher2_.deleted as deleted5_15_2_, teacher2_.deleted_at as deleted_6_15_2_, teacher2_.address as address7_15_2_, teacher2_.area_id as area_id8_15_2_, teacher2_.last_login_date as last_log9_15_2_, teacher2_.state as state10_15_2_, teacher2_.tpuser_id as tpuser_12_15_2_, teacher2_.type as type11_15_2_ from tpusers tpuser0_ left outer join parents parent1_ on tpuser0_.id=parent1_.tpuser_id and ( parent1_.deleted = 0) left outer join teachers teacher2_ on tpuser0_.id=teacher2_.tpuser_id and ( teacher2_.deleted = 0) where tpuser0_.id in (? , ?) limit ?
2021-09-15 18:13:44.102 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [BIGINT] - [88420]
2021-09-15 18:13:44.103 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [BIGINT] - [88421]
2021-09-15 18:13:44.148 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_24_0_] : [BIGINT]) - [88420]
2021-09-15 18:13:44.149 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_13_1_] : [BIGINT]) - [151600]
2021-09-15 18:13:44.149 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_15_2_] : [BIGINT]) - [110169]
2021-09-15 18:13:44.160 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([created_2_24_0_] : [TIMESTAMP]) - [2015-03-13T09:17:21Z]
2021-09-15 18:13:44.161 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([updated_3_24_0_] : [TIMESTAMP]) - [2019-12-05T05:43:17Z]
2021-09-15 18:13:44.162 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([lock_ver4_24_0_] : [INTEGER]) - [14]
2021-09-15 18:13:44.163 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([auto_gen5_24_0_] : [BOOLEAN]) - [false]
2021-09-15 18:13:44.164 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([email6_24_0_] : [VARCHAR]) - [476672913@qq.com]
2021-09-15 18:13:44.165 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([gender7_24_0_] : [INTEGER]) - [1]
2021-09-15 18:13:44.182 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([invitati8_24_0_] : [VARCHAR]) - []
2021-09-15 18:13:44.182 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([invited_9_24_0_] : [VARCHAR]) - []
2021-09-15 18:13:44.182 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([mobile_10_24_0_] : [VARCHAR]) - [10000088420]
2021-09-15 18:13:44.183 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([mobile_11_24_0_] : [BOOLEAN]) - [true]
2021-09-15 18:13:44.183 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([name12_24_0_] : [VARCHAR]) - [Brian aaa]
2021-09-15 18:13:44.186 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([passwor13_24_0_] : [VARCHAR]) - [8ffff2012f629266b004b54886de92f91636af28c48d04806bc3cf3e4c359ccf]
2021-09-15 18:13:44.187 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([passwor14_24_0_] : [TIMESTAMP]) - [2019-12-05T05:43:17Z]
2021-09-15 18:13:44.187 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([state15_24_0_] : [INTEGER]) - [null]
2021-09-15 18:13:44.190 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([uuid16_24_0_] : [VARCHAR]) - [d86970d0-0426-0136-35da-0c4de9bf6bbe]
2021-09-15 18:13:44.195 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([created_2_13_1_] : [TIMESTAMP]) - [2015-03-13T09:18:05Z]
2021-09-15 18:13:44.196 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([updated_3_13_1_] : [TIMESTAMP]) - [2017-07-21T06:23:12Z]
2021-09-15 18:13:44.197 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([lock_ver4_13_1_] : [INTEGER]) - [25]
2021-09-15 18:13:44.197 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([deleted5_13_1_] : [BOOLEAN]) - [false]
2021-09-15 18:13:44.197 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([deleted_6_13_1_] : [TIMESTAMP]) - [1969-12-31T16:00:00Z]
2021-09-15 18:13:44.198 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([address7_13_1_] : [VARCHAR]) - [null]
2021-09-15 18:13:44.198 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([state8_13_1_] : [BIGINT]) - [1]
2021-09-15 18:13:44.198 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([tpuser_i9_13_1_] : [BIGINT]) - [88420]
2021-09-15 18:13:44.202 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([created_2_15_2_] : [TIMESTAMP]) - [2015-03-13T09:17:21Z]
2021-09-15 18:13:44.203 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([updated_3_15_2_] : [TIMESTAMP]) - [2015-03-13T09:19:50Z]
2021-09-15 18:13:44.204 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([lock_ver4_15_2_] : [INTEGER]) - [1]
2021-09-15 18:13:44.204 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([deleted5_15_2_] : [BOOLEAN]) - [false]
2021-09-15 18:13:44.205 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([deleted_6_15_2_] : [TIMESTAMP]) - [1969-12-31T16:00:00Z]
2021-09-15 18:13:44.205 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([address7_15_2_] : [VARCHAR]) - [null]
2021-09-15 18:13:44.206 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([area_id8_15_2_] : [BIGINT]) - [807]
2021-09-15 18:13:44.206 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([last_log9_15_2_] : [TIMESTAMP]) - [null]
2021-09-15 18:13:44.207 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([state10_15_2_] : [BIGINT]) - [1]
2021-09-15 18:13:44.207 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([tpuser_12_15_2_] : [BIGINT]) - [88420]
2021-09-15 18:13:44.208 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_24_0_] : [BIGINT]) - [88421]
2021-09-15 18:13:44.209 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_13_1_] : [BIGINT]) - [151601]
2021-09-15 18:13:44.209 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_15_2_] : [BIGINT]) - [127175]
2021-09-15 18:13:44.210 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([created_2_24_0_] : [TIMESTAMP]) - [2015-03-13T09:18:12Z]
2021-09-15 18:13:44.212 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([updated_3_24_0_] : [TIMESTAMP]) - [2018-03-07T11:16:02Z]
2021-09-15 18:13:44.215 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([lock_ver4_24_0_] : [INTEGER]) - [3]
2021-09-15 18:13:44.216 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([auto_gen5_24_0_] : [BOOLEAN]) - [true]
2021-09-15 18:13:44.216 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([email6_24_0_] : [VARCHAR]) - [null]
2021-09-15 18:13:44.217 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([gender7_24_0_] : [INTEGER]) - [1]
2021-09-15 18:13:44.217 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([invitati8_24_0_] : [VARCHAR]) - []
2021-09-15 18:13:44.218 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([invited_9_24_0_] : [VARCHAR]) - []
2021-09-15 18:13:44.218 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([mobile_10_24_0_] : [VARCHAR]) - [10000088421]
2021-09-15 18:13:44.218 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([mobile_11_24_0_] : [BOOLEAN]) - [true]
2021-09-15 18:13:44.219 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([name12_24_0_] : [VARCHAR]) - [独径深幽的家长]
2021-09-15 18:13:44.219 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([passwor13_24_0_] : [VARCHAR]) - [8ed9074f0c0883c64830b82335c9d884d17665202f8fc45d1bb74394cbfe5d3b]
2021-09-15 18:13:44.220 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([passwor14_24_0_] : [TIMESTAMP]) - [2015-08-29T10:23:11Z]
2021-09-15 18:13:44.220 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([state15_24_0_] : [INTEGER]) - [null]
2021-09-15 18:13:44.220 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([uuid16_24_0_] : [VARCHAR]) - [d869f650-0426-0136-35da-0c4de9bf6bbe]
2021-09-15 18:13:44.221 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([created_2_13_1_] : [TIMESTAMP]) - [2015-03-13T09:18:12Z]
2021-09-15 18:13:44.222 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([updated_3_13_1_] : [TIMESTAMP]) - [2015-03-13T09:18:12Z]
2021-09-15 18:13:44.222 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([lock_ver4_13_1_] : [INTEGER]) - [0]
2021-09-15 18:13:44.224 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([deleted5_13_1_] : [BOOLEAN]) - [false]
2021-09-15 18:13:44.225 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([deleted_6_13_1_] : [TIMESTAMP]) - [1969-12-31T16:00:00Z]
2021-09-15 18:13:44.225 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([address7_13_1_] : [VARCHAR]) - [null]
2021-09-15 18:13:44.225 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([state8_13_1_] : [BIGINT]) - [null]
2021-09-15 18:13:44.225 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([tpuser_i9_13_1_] : [BIGINT]) - [88421]
2021-09-15 18:13:44.226 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([created_2_15_2_] : [TIMESTAMP]) - [2015-09-02T12:31:17Z]
2021-09-15 18:13:44.227 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([updated_3_15_2_] : [TIMESTAMP]) - [2015-09-02T12:31:17Z]
2021-09-15 18:13:44.227 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([lock_ver4_15_2_] : [INTEGER]) - [0]
2021-09-15 18:13:44.228 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([deleted5_15_2_] : [BOOLEAN]) - [false]
2021-09-15 18:13:44.228 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([deleted_6_15_2_] : [TIMESTAMP]) - [1969-12-31T16:00:00Z]
2021-09-15 18:13:44.229 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([address7_15_2_] : [VARCHAR]) - [null]
2021-09-15 18:13:44.229 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([area_id8_15_2_] : [BIGINT]) - [null]
2021-09-15 18:13:44.229 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([last_log9_15_2_] : [TIMESTAMP]) - [null]
2021-09-15 18:13:44.229 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([state10_15_2_] : [BIGINT]) - [null]
2021-09-15 18:13:44.230 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([tpuser_12_15_2_] : [BIGINT]) - [88421]
2021-09-15 18:13:44.599 DEBUG [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] org.hibernate.SQL                        : select thirdparty0_.uid as uid15_18_1_, thirdparty0_.id as id1_18_1_, thirdparty0_.id as id1_18_0_, thirdparty0_.created_at as created_2_18_0_, thirdparty0_.updated_at as updated_3_18_0_, thirdparty0_.lock_version as lock_ver4_18_0_, thirdparty0_.avatar_url as avatar_u5_18_0_, thirdparty0_.city as city6_18_0_, thirdparty0_.country as country7_18_0_, thirdparty0_.nickname as nickname8_18_0_, thirdparty0_.openid as openid9_18_0_, thirdparty0_.platform as platfor10_18_0_, thirdparty0_.province as provinc11_18_0_, thirdparty0_.sex as sex12_18_0_, thirdparty0_.uid as uid15_18_0_, thirdparty0_.unionid as unionid13_18_0_, thirdparty0_.uuid as uuid14_18_0_ from third_party_tpusers thirdparty0_ where thirdparty0_.uid in (?, ?)
2021-09-15 18:13:44.599 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [BIGINT] - [88420]
2021-09-15 18:13:44.599 TRACE [-,1c8ce272d06f45bc,1c8ce272d06f45bc,true] 2609 --- [nio-9000-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [BIGINT] - [88421]

打印日志的方法:

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql=trace

需要注意的是 三个实体里面 NO_PROXY都需要去掉,否则就会产生N+1问题。

@LazyToOne(LazyToOneOption.NO_PROXY)

zhangzhenhuajack commented 2 years ago

https://stackoverflow.com/questions/1444227/how-can-i-make-a-jpa-onetoone-relation-lazy