我保存了两个相互关联的实体。在它之后,我可以获得第一个实体,但是当我尝试从第一个实体获取第二个实体时,我得到一个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
我怎样才能获得包括他孩子在内的完整实体?只有如果我在提交事务后执行此查询,我可以获取数据,但我需要在完成事务的提交之前保存数据,更新数据和查找数据。
答案 0 :(得分:0)
可能单向关系存在问题。尝试在Arreglo类中添加一些@ManyToOne字段,并通过添加mappedBy =&#34;&#34;来声明它们应该如何匹配?到@OneToMany注释。
有一些很好的例子,关系应该如何: https://en.wikibooks.org/wiki/Java_Persistence/OneToMany
答案 1 :(得分:0)
您正在做的是分别保存parametrizacion和listArreglo。而且这与Arreglo的参数化没有任何关系。您必须将listArreglo设置为parametrizacion的listArreglo变量并仅保存参数化。