jpa oneToMany查出List为空,偶现

环境:springboot2+querydsl4.1.4+hibernate5.4.9+tomcat9

问题表象:有时候可以查出many的list,有时候不行。奇怪的是每次启动后,如果能查出来就一直可以查出来。如果查不出来就一直查不出来。
报错:Found shared references to a collection.

one:

@Getter  
@javax.persistence.Entity  
@Table(name \= "osiris\_produce\_demand")  
@DynamicInsert  
@DynamicUpdate  
@AggregateRoot  
@FieldDefaults(level \= AccessLevel.PRIVATE)  
@EqualsAndHashCode  
@NoArgsConstructor  
public class ProduceDemand extends BaseJpaEntity implements Entity<ProduceDemand\> {  
  
  private static final long serialVersionUID \= 8147306687313406381L;  
  
  /\*\*  
 \* 需求单号 \*/  @Column(name \= "demand\_no")  
  @NaturalId  
  String demandNo;  
  
  /\*\*  
 \* 需求单状态 \*/  @Column(name \= "demand\_status")  
  @Convert(converter \= DemandStatusEnumConverter.class)  
  DemandStatusEnum demandStatus;  
  
  /\*\*  
 \* 业务员id \*/  @Column(name \= "seller\_id")  
  String sellerId;  
  
  /\*\*  
 \* 业务员name \*/  @Column(name \= "seller\_name")  
  String sellerName;  
  
  /\*\*  
 \* 公司名 \*/  @Column(name \= "company\_name")  
  String companyName;  
  
  /\*\*  
 \* 需求单总金额(单位:分) \*/  @Column(name \= "total\_amount")  
  Long totalAmount;  
  
  /\*\*  
 \* 开票信息 \*/  @Embedded  
  Invoice invoice;  
  
  /\*\*  
 \* 工艺单信息 \*/  @OneToOne(cascade \= CascadeType.ALL, fetch \= FetchType.LAZY)  
  @JoinColumn(name \= "demand\_no", referencedColumnName \= "demand\_no", insertable \= false, updatable \= false)  
  Craft craft;  
  
  /\*\*  
 \* 货品列表 \*/  @OneToMany(cascade \= CascadeType.ALL, fetch \= FetchType.EAGER)  
  @JoinColumn(name \= "demand\_no", referencedColumnName \= "demand\_no", insertable \= false, updatable \= false)  
  List<Goods\> goodsList \= new ArrayList<>();

many:

  
@Getter  
@Entity  
@Table(name \= "osiris\_produce\_demand\_goods")  
@AllArgsConstructor  
@NoArgsConstructor  
@EqualsAndHashCode  
@FieldDefaults(level \= AccessLevel.PRIVATE)  
public class Goods extends BaseJpaEntity implements ValueObject<Goods\> {  
  
  private static final long serialVersionUID \= -7313657392781278607L;  
  
  /\*\*  
 \* 需求单号 \*/  @Column(name \= "demand\_no")  
  String demandNo;  
  
  /\*\*  
 \* 货品名称 \*/  String goodsName;  
  
  /\*\*  
 \* 货品单价(单位:分) \*/  Long goodsUnitPrice;  
  
  /\*\*  
 \* 货品数量 \*/  Integer goodsNums;  
  
  /\*\*  
 \* 货品总价(单位:分) \*/  Long goodsTotalPrice;

查询代码:

Pageable pageable = QPageRequest.of(demandPageQuery.getPageNum() \- 1, demandPageQuery.getPageSize());  
  
QueryResults<ProduceDemand> tuples = jpaQueryFactory.selectFrom(qProduceDemand)  
  .where(buildPredicate(demandPageQuery))  
  .orderBy(qProduceDemand.id.asc())  
  .offset(pageable.getOffset())  
  .limit(demandPageQuery.getPageSize())  
  .fetchResults();
阅读 3.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题