我在实体映射这些对象时遇到了一些问题。我没有得到异常,但似乎它进入了一个递归循环
public class LabResult implements java.io.Serializable {
private Long labResultId;
private Customer customer;
private LabResultUnprocessed labResultUnprocessed;
public LabResult(){
}
public LabResult(Long labResultId) {
this.labResultId = labResultId;
}
public LabResult(Long labResultId, Customer customer, LabResultUnprocessed labResultUnprocessed) {
this.labResultId = labResultId;
this.customer = customer;
this.labResultUnprocessed = labResultUnprocessed;
}
@OneToOne(fetch=FetchType.LAZY, mappedBy="labResult")
@JoinColumn(name="lab_result_id")
public LabResultUnprocessed getLabResultUnprocessed(){
return labResultUnprocessed;
}
public void setLabResultUnprocessed(LabResultUnprocessed labResultUnprocessed) {
this.labResultUnprocessed = labResultUnprocessed;
}
下一个域是LabResultUnprocessed
@Entity
@Table(name="lab_result_unprocessed"
,schema="public"
)
public class LabResultUnprocessed implements java.io.Serializable {
private LabResult labResult;
private Boolean processedFlag;
public LabResultUnprocessed() {
}
public LabResultUnprocessed(LabResult labResult, Boolean processedFlag) {
this.labResult = labResult;
this.processedFlag = processedFlag;
}
@Id
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="lab_result_id")
public LabResult getLabResult() {
return labResult;
}
public void setLabResult(LabResult labResult) {
this.labResult = labResult;
}
这是LabResultUnprocessedRepository
public interface LabResultUnprocessedRepository extends CrudRepository<LabResult, String>{
@Query("select lru from LabResultUnprocessed lru "
+" join fetch lru.labResult lr "
+" where lru.labResult.labResultId = lr.labResultId "
+" and lru.processedFlag = false")
List<LabResultUnprocessed> findAllByProcessedFlag();
在我的服务中,当我调用这个方法时,似乎它进入了一个递归循环,并且永远不会碰到我的断点,这是在第二行的实际方法调用中。
List<LabResultUnprocessed> allUnprocessedResults = new ArrayList<LabResultUnprocessed>();
allUnprocessedResults = labResultUnprocessedRepository.findAllByProcessedFlag();
allUnprocessedResults.forEach(lru -> {
...////
答案 0 :(得分:1)
本节中有两个问题:
@OneToOne(fetch=FetchType.LAZY, mappedBy="testResult")
@JoinColumn(name="test_result_id")
mappedBy
和@JoinColumn
不会在一起。关系的一端应该有一个,而另一端应该有另一端。两端都不应该同时存在。从此端删除@JoinColumn
以解决此问题。mappedBy
的值必须是关系另一端的字段名称 - 在本例中为labResult
。