方法调用的反复循环,不确定它是否与映射有关

时间:2016-10-14 15:55:40

标签: java hibernate jpa

我在实体映射这些对象时遇到了一些问题。我没有得到异常,但似乎它进入了一个递归循环

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 -> {
    ...////

1 个答案:

答案 0 :(得分:1)

本节中有两个问题:

@OneToOne(fetch=FetchType.LAZY, mappedBy="testResult")
@JoinColumn(name="test_result_id")
  1. mappedBy@JoinColumn不会在一起。关系的一端应该有一个,而另一端应该有另一端。两端都不应该同时存在。从此端删除@JoinColumn以解决此问题。
  2. mappedBy的值必须是关系另一端的字段名称 - 在本例中为labResult