2016-01-12 62 views
4

我曾在一個ProjectRepository的方法看起來是這樣的:春數據JPA查詢生成的場

findByUserID(int userID); 

這將列出引用某個用戶的所有項目。由於其他的要求,我現在需要從項目中引用的用戶,而不是僅僅的用戶ID,像這樣:

@ManyToOne 
@JoinColumn(name = "userID", referencedColumnName = "userID") 
private User user; 

這曾經只是:

int userID; 

所以我更換了方法與:

findByUser(User user); 

但是這需要一個額外的調用數據庫來獲取用戶對象爲給定的用戶ID。有沒有辦法在我的新課堂中使用第一種方法?如果我只是不停的第一個方法,我得到一個

org.springframework.data.mapping.PropertyReferenceException: No property ID found for type User! Traversed path: Project.user. 

這是可能的,而無需編寫自定義查詢?

+0

User的ID屬性的名稱是什麼? –

+0

我所有的ID都使用約定:classNameID;例如userID – delucasvb

回答

3

假定用戶類包含被定義爲:

public class User { 
    private int userId; 

    public User(int userId) { 
     this.userId = userId; 
    } 
    //getters setters ommitted 
} 

和項目類有像這樣在它用戶對象:

public class Project { 
    private User user; 

    public Project() { 
    } 
    //rest ommitted 
} 

應該根據文檔能夠寫通過編寫訪問嵌套屬性(如project.user.userId)的自定義查詢

findByUserUserId(int userId); 

或者至少這就是我通過閱讀文檔所瞭解的內容here

+0

的屬性ID是的,自定義查詢可能是要走的路。但我正在尋找一個解決方案,而不必寫查詢。我將Spring的查詢創建(和Hibernate)用於所有其他數據庫操作,所以我有興趣學習更復雜的方法名稱。我在文檔中找不到任何... – delucasvb

+0

是不是使用查詢創建的上述解決方案?我這樣做了我所有的彈簧靴。它更快,更酷。 findByLastNameEqualsIgnoreCase(String lastName)像那種風格的權利?這是你的查詢創建意味着什麼? Cos是findByUserUserId(int userId)正在做的事情。它應該在理論上自動生成一個查詢select * from project where project.user.userId =:userId –

+0

對不起,我一定誤解了你的答案!我會立即嘗試你的解決方案。編輯:這正是我正在尋找,謝謝! – delucasvb

0

嘗試使用@PrimaryKeyJoinColumn註釋。

+0

我該把它放在哪裏?如果我把它放在我的User類中並更新我的存儲庫,我仍然得到一個PropertyReferenceException:沒有找到類型爲User – delucasvb