Wenn ich einen Elternteil wie diesJPA - Update Childs refrence Mutter
public class Company implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="COMPANY_ID", updatable = false)
private int companyId;
//bi-directional many-to-one association to User
@OneToMany(mappedBy="company")
private List<User> users;
}
Und ein Kind wie diese
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="USER_ID", updatable=false)
private int userId;
private String username;
//bi-directional many-to-one association to Company
@ManyToOne
@JoinColumn(name="COMPANY_ID")
private Company company;
}
Und dann in meinem JAX-RS REST habe rufe abrufen ich einen Benutzer aus der DB, die in Unternehmen A ist, und ich möchte hier, dass der Nutzer Firma B ändern ist, was ich
@POST
@Path("updateUserCompany")
@Produces("application/json")
public Response updateUserCompany() {
//this get the company I want to set the user to
Company company = entityManager.createNamedQuery("Company.getCompanyByName", Company.class)
.setParameter("companyName", "CompanyB")
.getSingleResult();
//this gets the user i want to change
User user = entityManager.createNamedQuery("User.getUserById", User.class).setParameter("userId", 1).getSingleResult();
user.setCompany(company);
entityManager.persist(user);
entityManager.flush();
Aber der Benutzer nicht aktualisiert wird in der haben DB? Wie kann ich es in der DB aktualisieren lassen?
Dank
1) Ist Ihre JAX-RS REST Klasse EJB? Denn wenn dieser Code nicht innerhalb der Transaktion ausgeführt wird. Notieren Sie Ihre 'updateUserCompany()' Methode mit 'javax.transaction.Transactional'. 2) Verwende 'entityManager.merge()' Methode anstelle von 'persist', die für persistierende neue Entitäten verwendet wird (Zeilen einfügen) – Artem