【发布时间】:2016-12-15 17:19:44
【问题描述】:
如果我有这样的父母
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();
但是用户没有在数据库中更新?我怎样才能让它在数据库中更新?
谢谢
【问题讨论】:
-
1) 您的 JAX-RS REST 类是 EJB 吗?因为如果不是这段代码在事务内部执行。使用
javax.transaction.Transactional注释您的updateUserCompany()方法。 2) 使用entityManager.merge()方法代替persistwhish 用于持久化新实体(插入行)
标签: java hibernate jpa jax-rs named-query