2016-05-22 8 views
0

DBに既に存在する特定の番号をユーザーが入力すると、例外がスローされます。JPAでプライマリキーではない列フィールドを見つける方法

私はJPAでem.findメソッドを使用しようとしましたが、em.findメソッドでエンティティクラスとプライマリキーを渡す必要がありましたが、ここで見つけたいカラムはプライマリキーではありません。

例:em.find( "Article.class"、articleno);ここでarticlenoは主キーではありません

このArticle.classでは、idとoriginが主キーである複合主キー(ArticlePk.class)があります。

複合主キーを使用して記事を検索する方法。

あなたは私を助けることができますか?あなたは複合主キーに基づいて記事のオブジェクトを取得したい場合は、

ArticlePk articlePk = new ArticlePk(); 

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

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

の下

+0

em.Findのみを使用する必要がありますか?この場合はJQLを記述し、articleNoを入力パラメータとして渡すこともできます。 – shankarsh15

+0

は、はい、私は他の開発者によって書かれたコードを持っているので、私は、そのコードを使用する必要があるあなたがem.findで複合主キー()が正しいに渡す必要が – COL

+0

ことを行うには、とにかくはありますか? – shankarsh15

答えて

0

参照してください。あなたは、厳密その後することができますarticleNoで照会したい場合はArticlePkが

Serializableを実装していることを確認してください以下のようにJQLのアプローチのために、クエリを書くことができます:

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

この場合は0123場合は、私はよくあなたの状況を理解願ってarticleNoためarticleDB

+0

しかし、どのように我々は唯一のidicとoriginを渡しているarticlenoが存在するかどうかを確認することができます..? 私はart.kindにartpk、artorigin、articlee noを渡すことができますかどうかを確認するために、noと同様に正しい権限をデータベースに渡す必要があります。 – 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のみを渡していますか? 私はあなたが記事のインスタンスを得た後、このインスタンスかどうかを確認するem.find – COL

+0

にノーarticlee、artorigin、記事がないだけでなく、それがdb..howであるかどうかをチェックする権利を渡す必要があり、我々はartpkを渡すことができます(レコード)には記事がありません。おそらく、あなたは記事NoをNot Nullとして定義し、常にフィールドであることを確かめるでしょうか? – erolkaya84

関連する問題