2013-11-24 62 views
0

接合2代表我有這樣的錯誤的createQuery在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()); 

我使用這2個表:醫師無(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

我不知道爲什麼在第二個實體,它是將最後一個屬性:idMedecin,而你已經加入了兩個實體到每個人。也許你應該省略它。 如果查詢的目的是選擇所有與給定medecin的creneaux,那麼你應該查詢更改爲:

createQuery("SELECT c FROM Creneaux c WHERE c.medecin.id = :idMedecin").setParameter("idMedecin", medecin.getId()); 

medecin.getId()要查詢的執行前提供。

0

這是因爲Creneaux.medecin字段是transient。 JPA忽略瞬態字段。

另一件事是你沒有兩個加入這兩個實體。如果您想按照Medecin ID進行過濾,則只需按照@Omar所述執行查詢即可。

相關問題