我使用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;
}
这是我的道法:
@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;
}
非常感谢任何帮助。
答案 0 :(得分:1)
尝试创建一个代表您的复合键的类:
public class ReferentielId implements Serializable {
private static final long serialVersionUID = 0L;
private Long projet; // Same type than idProjet, same name than inside Referentiel
private Long ressource; // Same type than idRessource (I guess), same name than inside Referentiel
// Constructors, getters, setters...
}
并将其分配给具有该复合密钥的实体。
@Entity
@IdClass(ReferentielId.class) // <- here
@Table(name = "Et_referentiel")
public class Referentiel implements Serializable {
// ...
}
请注意,必须有一个表示复合键的类,即使这对您的问题没有帮助。