2014-06-21 3 views
-1

Je voudrais demander comment implémenter une telle chose comme mettre à jour une entité avec une relation @ManyToOne. J'ai deux tables documents et le type de Doctype comme ça
doucments
@JoinColumn(name = "doctype", referencedColumnName = "document_id") @ManyToOne private DocType doctype;
DocType
@OneToMany(mappedBy = "doctype") private Collection<Documents> DocCollection;Mise en œuvre de la mise à jour de JPA MantyToOne

Lorsque l'utilisateur doit mettre à jour doctype il tapez la valeur dans wich combobox contiennent tous les noms de DOCTYPE dans la chaîne .Ensuite Je trouve entité doctype, où nom de doctype comme valeur sélectionnée dans la zone de liste déroulante, puis j'ai défini cette entité de type doctype sur l'entité documents.
public void saveDoc() { entityManager.getTransaction().begin(); currentEntitydoc.setDocType(getDocTypeEntity(ComboBox.getSelectedValue())); entityManager.getTransaction().commit(); }

Où getDocTypeEntity() comme
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); }

Semble qu'il est une tâche très souvent, comment mettre en œuvre do u telles choses? Y a-t-il un meilleur moyen de le faire en JPA?

Répondre

0

Les entités ont des ID qui les identifient de manière unique. Et l'EntityManager permet d'obtenir une entité compte tenu de son type et de son identifiant. Donc, tout ce dont vous avez besoin est

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

ou même

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

qui n'a même pas besoin d'émettre une requête de sélection (et retourne un proxy unitilized).

Vous ne devez pas utiliser le nom de Doctype comme valeur des options de sélection, mais son ID.