【发布时间】:2018-08-09 05:23:52
【问题描述】:
我在使用子实体作为搜索参数检索实体时遇到问题。实体与多对一关系是单向的,每个对象都以 FetchType.LAZY 的形式获取。 当我通过子实体查找实体时,结果为空。但是当我设置为 Eager 时,它是正确的。
我的实体:
@NoArgsConstructor
@Getter
@Entity
@Table(name = "partner")
public class PartnerEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String login;
public PartnerEntity(String login) {
this.login = login;
}
}
@NoArgsConstructor
@Getter
@Entity
@Table(name = "point")
public class PointEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "partner_Id")
private PartnerEntity partnerEntity;
public PointEntity(PartnerEntity partnerEntity) {
this.partnerEntity = partnerEntity;
}
}
@NoArgsConstructor
@Getter
@Entity
@Table(name = "orer")
public class OrdEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PAYMENT_POINT_ID")
private PointEntity pointEntity;
public OrdEntity(PointEntity pointEntity) {
this.pointEntity = pointEntity;
}
}
@NoArgsConstructor
@ToString
@Getter
@Entity
@Table(name = "BL")
public class BLEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PARTNER_LOGIN", referencedColumnName = "login")
private PartnerEntity partnerEntity;
private String number;
public BLEntity(PartnerEntity partnerEntity, String number) {
this.partnerEntity = partnerEntity;
this.number = number;
}
}
我正在寻找使用 OrdEntity 子实体的 BLEntity:
final OrdEntity byId = ordRepo.findById(id);
final PartnerEntity partnerEntity = order.getPointEntity().getPartnerEntity();
final BLEntity blEntityResult= blRepo.findOneByNumberAndPartner(number, partnerEntity);
对象 partnerEntity 不为空,它是正确的对象。 我将 blEntityResult 设为 null,但如果我将 PointEntity fetch 更改为 FetchType.EAGER,则 blEntityResult 不为 null(正确)。
我在以下存储库中的自定义查询:
public interface BLRepo extends JpaRepository<BLEntity, Long> {
@Query("select b from BLEntity b where b.number = :number and b.partnerEntity= :partner")
BLEntity findOneByNumberAndPartner(@Param("number") String number, @Param("partner") PartnerEntity partner);
}
如果正在下载的伙伴对象不为空且正确,为什么会发生这种情况?
【问题讨论】:
-
为什么只生成Getter?塞特人呢? JPA 需要它们。
-
@SimonMartinelli 我添加了 Setter 但结果是一样的
标签: java hibernate jpa spring-data-jpa