繁体   English   中英

Spring JPA @OneToMany一个方向始终为null

[英]Spring jpa @OneToMany one direction always null

@Data
@Entity
@Table(name = "member")
public class MemberEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @OneToMany
    @JoinColumn(name = "memberId")
    private List<PhoneEntity> phoneEntities;
}


@Data
@Entity
@Table(name = "phone")
public class PhoneEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column
    private Integer memberId;
}


@Repository
public interface MemberRepository extends JpaRepository<MemberEntity, Integer> {

    @Query("select m from MemberEntity m join fetch m.phoneEntities where m.id=?1")
    MemberEntity findByIdWithPhone(Integer id);
}

MemberPhone创建OneToMany关系

我试图使用@Query("select m from MemberEntity m join fetch m.phoneEntities where m.id=?1") Phone Member提取@Query("select m from MemberEntity m join fetch m.phoneEntities where m.id=?1")查询

该查询是在my-sql查询下创建的

SELECT 
memberenti0_.id as id1_0_0_,
phoneentit1_.id as id1_1_1_,
phoneentit1_.member_id as member_i2_1_1_,
phoneentit1_.member_id as member_i2_1_0__,
phoneentit1_.id as id1_1_0__ 
from member memberenti0_
inner join phone phoneentit1_ on memberenti0_.id=phoneentit1_.member_id
where memberenti0_.id=?

并且结果MemberEntity不为null(这意味着插入和内部MemberEntity#phoneEntities有效!),但MemberEntity#phoneEntities始终为null

我试图更改List<PhoneEntity> Collections<PhoneEntity> Set<PhoneEntity>所有集合类型无效。

我怀疑在生成的查询(member_i2_1_1_1_,member_i2_1_0__)中“电话”表调用中的列两次,但是我不知道为什么。

您必须将映射更正为:

@Data
@Entity
@Table(name = "member")
public class MemberEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @OneToMany(
        mappedBy = "member"
    )        
    private List<PhoneEntity> phoneEntities;
}


@Data
@Entity
@Table(name = "phone")
public class PhoneEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @ManyToOne(fetch = FetchType.LAZY) // Or Eager 
    @JoinColumn(name = "member_id")
    private MemberEntity member;
}

并且无需在查询中指定join:

@Query("select m from MemberEntity m where m.id=?1")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM