JPA MantyToOne更新实现

时间:2014-06-21 19:16:22

标签: java jpa persistence toplink

我想问一下如何实现像@ManyToOne关系更新实体这样的事情。我有两个表Documents和DocType类型
Doucments
@JoinColumn(name = "doctype", referencedColumnName = "document_id") @ManyToOne private DocType doctype;
DocType
@OneToMany(mappedBy = "doctype") private Collection<Documents> DocCollection;

当用户需要更新doctype时,他在组合框中键入值,其中包含字符串中的所有文档类型名称。然后我找到doctype实体,其中doctype name就像在combobox中选择的值,然后我将doctype实体设置为文档实体。
public void saveDoc() { entityManager.getTransaction().begin(); currentEntitydoc.setDocType(getDocTypeEntity(ComboBox.getSelectedValue())); entityManager.getTransaction().commit(); }

其中getDocTypeEntity()类似于 public DocType getDocTypeEntity ( String userInput) { query = manager.createQuery( "Select type from DocType type Where type.name=:arg1" ); query.setParameter("arg1" , userInput); List<DocType> list = query.getResultList(); if (list.size() < 1 ) { System.out.println ("can't find such DocType name); } return list.get(0); }

似乎这是一项非常常见的任务,你如何实施这些事情?在JPA中有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

实体具有唯一标识它们的ID。并且EntityManager允许获取给定其类型和ID的实体。所以你需要的只是

DocType docType = em.find(DocType.class, docTypeId);

甚至

DocType docType = em.getReference(DocType.class, docTypeId);

甚至不需要发出选择查询(并返回一个统一代理)。

您不应将Doctype的名称用作选择选项值,而应使用其ID。