[英]CreateQuery joining 2 tables in JPA
我有这个错误
The collection-valued path 'c.medecin' cannot be resolved to a valid association field
The state field path 'm.id' cannot be resolved to a valid type.
当我执行此请求时
createQuery("select c from Creneaux c join c.medecin m where m.id=:idMedecin").setParameter("idMedecin", medecin.getId());
我使用以下两个表:MEDECINS(ID)和CRENEAUX(ID,ID_MEDECIN)
@Entity
@Table(name = "medecins")
@XmlRootElement
public class Medecins implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ID")
private Long id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "medecin"/*"idMedecin"*/)
private transient List<Creneaux> creneauxList;
}
和
@Entity
@Table(name = "creneaux")
public class Creneaux implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ID")
private Long id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ID_MEDECIN")
private transient Medecins medecin;
@Column(name = "ID_MEDECIN")
private BigInteger idMedecin;
我从JPA开始,所以我不确定所有代码。 我认为查询是正确的,但是我不知道如何注释实体以使查询有效。 谢谢
我想知道为什么要在第二个实体中添加最后一个属性: idMedecin
而您已经将两个实体彼此连接了。 也许你应该忽略它。 如果查询的目的是选择与给定的医学相关的所有克里尼奥酒,那么您应该将查询更改为:
createQuery("SELECT c FROM Creneaux c WHERE c.medecin.id = :idMedecin").setParameter("idMedecin", medecin.getId());
执行查询之前应在何处提供medecin.getId()
。
这是因为Creneaux.medecin
字段是transient
。 JPA将忽略瞬态字段。
另一件事是这两个实体没有两个联接。 如果要按Medecin ID进行过滤,则足以执行@Omar描述的查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.