[英]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);
}
从Member
到Phone
创建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.