2016-05-22 45 views
0

中找到不是主鍵的列字段如果用戶輸入已存在於數據庫中的特定號碼,我有這種情況我應該拋出異常。如何在JPA

我試圖在JPA中使用em.find方法,但在em.find方法中,我們需要傳遞實體類和主鍵,但這裏我想找到的列不是主鍵。

例如:em.find(「Article.class」,articleno); articleno不是主鍵

對於這篇文章。我有一個複合主鍵(ArticlePk.class),其中id和origin是主鍵。

如何找到使用複合主鍵的文章no。

你們能幫我嗎?

+0

您是否需要使用em.Find?這意味着您可以在這種情況下編寫JQL並將articleNo作爲輸入參數。 – shankarsh15

+0

是的,我有一個由其他開發人員寫的代碼,所以我需要使用該代碼是否有這樣做 – COL

+0

你需要在em.find()複合主鍵傳遞正確嗎? – shankarsh15

回答

0

如果你想基於複合主鍵搞定文章對象,請參見下面

ArticlePk articlePk = new ArticlePk(); 

articlePk .setId(1); 
articlePk .setOrigin(""); 

Article article = em.find(Article .class, articlePk); 

請確保ArticlePk實現Serializable

如果嚴格想articleNo那麼你就可以查詢爲JQL方法,您可以如下圖所示寫查詢:

List results = em.createQuery("SELECT a FROM Article a where a.articleNo = :articleNo") 
         .setParameter("articleNo", "").getResultList(); 

在這種情況下,如果List是空的,這意味着article對於articleNo未找到DB

+0

但是我們如何檢查articleno是否存在,我們只傳遞id和origin ..? 我需要通過文章沒有以及檢查是否有在數據庫中的權利..我們可以通過artpk,artorigin,articlee沒有進入em.find – COL

+0

正如我之前所說,那麼在那種情況下,你有去JQL或JPQL或Criteria甚至原生SQL。 – shankarsh15

0

我希望我能很好地理解您的情況。如果你在這裏使用@EmbeddedId,那麼你可以很容易地得到它。

@Entity 
public class Article { 
    @EmbeddedId 
    private ArticlePk key; 

    @Column(name = "Article_No") 
    private String articleNo; 

    /** Your getters and setters **/ 
} 

@Embeddable 
public class ArticlePK implements Seriza { 

    @Column(name = "Id", nullable = false) 
    private int id; 

    @Column(name = "Origin", nullable = false) 
    private String origin; 

    /** getters and setters **/ 
} 

在你的DAO實現中,

ArticlePK artPK = new ArticlePK(); 

artPK.setId(12334); 
artPK.setOrigin("ABC123"); 

Article article = em.find(Article.class, artPK); 
System.out.printl("Article no: " + article.getArticleNo()); 
+0

但是,我們如何檢查articleno是否存在,我們只傳遞id和origin ..? 我需要通過文章沒有以及權利來檢查它是否有在數據庫..我們可以通過artpk,artorigin,articlee no進入em.find – COL

+0

一旦你拿到文章實例,你可以檢查這個實例(記錄)有任何文章否。也許你可能會把article no定義爲Not Null,並確定它始終是字段? – erolkaya84