3

我正在创建 RESTful Web 服务。允许客户注册Company,然后在需要时进行更新。CompanyAddress关联。当用户请求Company更新时,它会发送Company对象 id 并Company涉及Address没有Addresses id 的对象。要更新Company对象,我使用休眠merge方法。它正确设置了新Company数据,但它创建了新Address行而不是更新它。

我怎么解决这个问题?

我可以Address通过company.getAddress()获取它的 id 并合并新来获取,Address但是当我这样做时,所有Company数据都被获取,我认为这不好。

    public class Company implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "address_id")
    private Address address;
}

更新

我还可以编写自定义查询

UPDATE address SET city='NEW YORK' FROM companies WHERE address.id = companies.address_id

但我希望它成为默认操作。如果您看到任何没有 id 的关联,请使用上述查询。

4

1 回答 1

0

我不太清楚您为什么使用合并而不是直接更新请求的地址对象。

例如。(伪代码)

Company c = (Company)query.findbyid(id)
Address a = c.getAddress()

a.setField1(field1);
a.setField2(field2);
a.setField3(field3);

pm.commit(c);

您需要检查两件事是否已设置为使用合并技术: 1. 地址关联是延迟加载的,这意味着在您请求之前它为空。会不会是您将 Company 对象与 PersistenceManager 分离,然后尝试合并?

  1. 另外,我假设您的地址也是一个实体。它会生成 id(主键)。确保不要搞砸了。如果它重新生成一个新的 id,你将得到另一行。
于 2012-10-14T23:15:53.437 回答