Если у меня есть подразделы, как этотJPA - Обновление порожденных refrence родительских
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;
}
и ребенок, как этот
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;
}
И тогда в моем JAX-RS REST позвонить мне получить пользователь от БД, что в компании A, и я хочу изменить, что пользователь в компании B. Вот что я имею
@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();
Но пользователь не обновляется в DB? Как я могу обновить его в БД?
Благодаря
1) Является ли ваш JAX-RS REST класс EJB? Потому что, если этот код не выполняется внутри транзакции. Аннотируйте свой 'updateUserCompany()' метод с помощью 'javax.transaction.Transactional'. 2) Используйте метод 'entityManager.merge()' вместо 'persist' whish используется для сохранения новых сущностей (вставки строк) – Artem