如何在Spring Data JPA中提交之前获取数据?

时间:2018-03-21 00:56:52

标签: java spring hibernate repository spring-data-jpa

我保存了两个相互关联的实体。在它之后,我可以获得第一个实体,但是当我尝试从第一个实体获取第二个实体时,我得到一个NullPointerException。这是一个例子:

@Entity
@Table(name = "PARAMETRIZACION")
public class Parametrizacion {

    @Id
    @Column(name = "id_param", unique = true, nullable = false)
    private Integer idParam;

    @OneToMany(fetch = FetchType.LAZY)
    private List<Arreglo> listArreglo;
}

@Entity
@Table(name = "ARREGLO")
public class Arreglo {
    @Id
    @Column(name = "id_arreglo", unique = true, nullable = false)
    private Integer idArreglo;
}

我的服务:

@Service
@Repository
public class TestServiceImpl implements TestService {

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void methodTest(){
        ...
        parametrizacionRepository.saveAndFlush(parametrizacion);//Id=1
        ...
        arregloRepository.saveAndFlush(listArreglo);//Id=1

        Parametrizacion paramFetch = parametrizacionRepository.findById(1);
        Log.info("Param.Id=" + paramFetch.getIdParam());
        Log.info("Size=" + paramFetch.getListArreglo().size());
    }
}

第一个日志的结果是:Param.Id = 1 第二个日志的结果是:NullPointerException

我怎样才能获得包括他孩子在内的完整实体?只有如果我在提交事务后执行此查询,我可以获取数据,但我需要在完成事务的提交之前保存数据,更新数据和查找数据。

2 个答案:

答案 0 :(得分:0)

可能单向关系存在问题。尝试在Arreglo类中添加一些@ManyToOne字段,并通过添加mappedBy =&#34;&#34;来声明它们应该如何匹配?到@OneToMany注释。

有一些很好的例子,关系应该如何: https://en.wikibooks.org/wiki/Java_Persistence/OneToMany

答案 1 :(得分:0)

您正在做的是分别保存parametrizacion和listArreglo。而且这与Arreglo的参数化没有任何关系。您必须将listArreglo设置为parametrizacion的listArreglo变量并仅保存参数化。