【发布时间】:2017-06-21 14:16:34
【问题描述】:
我已经使用 JPA 构建了我的数据模型,并且正在使用 Hibernate 的 EntityManager 来访问数据。我正在将此配置用于其他类并且没有问题。
问题是我创建了一个带有复合主键的实体(两个键是外键),添加元素效果很好我在数据库中检查了它,但我无法从数据库中检索填充的行。
例如,如果我查询“FROM Referentiel”以返回表中所有引用的列表,我得到这个 [{},{}] 我的 list.size() 具有正确数量的元素 (2),但元素为空.
实体:
@Entity
@Table(name = "Et_referentiel")
public class Referentiel implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@ManyToOne
@JoinColumn(name = "id_projet")
private Projet projet;
@Id
@ManyToOne
@JoinColumn(name = "id_ressource")
private Ressource ressource;
@Column(name = "unite", nullable = false)
private String unite;
}
这是我的控制器 getList 方法:
@PostMapping(value = "/list", consumes = { MediaType.APPLICATION_JSON_UTF8_VALUE })
public List<Referentiel> listReferentiel(@RequestBody Long idProjet) {
List<Referentiel> referentiel = referentielService.listReferentiel(idProjet);
return referentiel;
}
这是我的 dao 方法:
@Autowired
private EntityManager em;
@Override
public void ajouterReferentiel(Referentiel ref) {
em.persist(ref);
em.flush();
}
@SuppressWarnings("unchecked")
@Override
public List<Referentiel> listReferentiel(Long idProjet) {
Query query = em.createQuery("Select r from Referentiel r where r.projet.idProjet=:arg1");
query.setParameter("arg1", idProjet);
em.flush();
List<Referentiel> resultList = query.getResultList();
return resultList;
}
非常感谢任何帮助。
【问题讨论】:
-
您的项目中是否有 json jar 或依赖项?你在spring中添加了json转换器吗?你能展示你是如何配置你的控制器的吗?
-
我的项目总是完美运行,我只有在使用复合键时才会出现这个问题,这不是配置问题
-
Projet 也可以序列化吗?
-
是的,它是可序列化的
-
我没有看到交易,所以我会先检查您是否先提交了插入,然后再尝试查询它们。其次,JPA 在使用组合键时需要主键类或嵌入式 ID,而您的描述中没有。 pk 类将仅用于查找操作以保存标记为 ID 的两个引用中的值。
标签: spring postgresql hibernate jpa composite-key