环境: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();