如果用户输入一个已经存在于DB中的特定号码我会抛出异常,我会遇到这样的情况。
我尝试在JPA中使用em.find方法但是在em.find方法中我们需要传递实体类和主键,但是我想要找到的列不是主键。
例:em.find(" Article.class",articleno);其中articleno不是主键
对于这个Article.class,我有一个复合主键(ArticlePk.class),其中id和origin是主键。
如何使用复合主键查找文章。
你们能帮助我吗?
答案 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 **/
}