如何在JPA中查找不是主键的列字段

时间:2016-05-22 17:26:50

标签: java database hibernate jpa entity

如果用户输入一个已经存在于DB中的特定号码我会抛出异常,我会遇到这样的情况。

我尝试在JPA中使用em.find方法但是在em.find方法中我们需要传递实体类和主键,但是我想要找到的列不是主键。

例:em.find(" Article.class",articleno);其中articleno不是主键

对于这个Article.class,我有一个复合主键(ArticlePk.class),其中id和origin是主键。

如何使用复合主键查找文章。

你们能帮助我吗?

2 个答案:

答案 0 :(得分: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的{​​{1}}

答案 1 :(得分:0)

我希望我能理解你的情况。如果你在这里使用@EmbeddedId,那么你可以轻松搞定。

DB

在您的DAO实施中;

@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 **/
}