我有这个错误
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开始,所以我不确定所有的代码。我认为查询是正确的,但我不知道如何注释实体以使查询有效。 感谢
答案 0 :(得分:0)
我想知道为什么在第二个实体中添加最后一个属性:idMedecin
,而你已经将两个实体加入了彼此。也许你应该省略它。
如果查询的目的是选择与给定medecin相关的所有creneaux,那么您应该将查询更改为:
createQuery("SELECT c FROM Creneaux c WHERE c.medecin.id = :idMedecin").setParameter("idMedecin", medecin.getId());
在查询执行之前应该提供medecin.getId()
。
答案 1 :(得分:0)
那是因为Creneaux.medecin
字段是transient
。 JPA会忽略瞬态字段。
另一件事是你没有两个加入这两个实体。如果你想用Medecin ID过滤它就足以执行@Omar描述的查询。