瞬态域实例jpa& spring

时间:2014-03-18 08:38:37

标签: java spring hibernate spring-mvc jpa

我的域名对象大致如下:

@Entity
public class Customer{
    @Id
    private String id;
    private String name;
    @OneToMany(cascade=CascadeType.ALL)
    private List<Account> accountList;
}

@Entity
public class Account{
    @Id
    private String id;
    private String name;
    @OneToMany
    private List<Service> serviceList;
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(nullable=false)
    private Customer customer;
}

@Entity
public class Service{
    @Id
    private String id;
    private String name;
    @ManyToOne
    @JoinColumn(nullable=false)
    private Account account;
}

我有一个事务性的Spring服务。我想将Account实例返回到正面,但由于带宽问题,我不想发送客户和服务列表信息。

当我这样做时: account.setServiceList(NULL); 它没有错误,但过了一段时间它会删除我的所有服务列表。

当我这样做时: account.setCustomer(NULL); 它说帐户的customer_id不能为空。

我只想在没有验证的情况下返回瞬态实例。我该怎么办呢。

1 个答案:

答案 0 :(得分:2)

  1. 您的问题的解决方案是通过调用entityManager.detach(accountInstance)(或entityManager.clear(),如果您使用JPA 1.0来分离所有实体)使实体分离,并且仅对其进行任何更改。如果您使用Hibernate会话,请使用Session.evict()方法。
  2. 另一个解决方案是使用DTO,只有你需要的字段。
  3. PS:我认为你有一个错误,其中mapped属性的一侧缺少双向关系。例如Customer你应该有类似

    的东西
    @OneToMany(cascade=CascadeType.ALL, mappedBy="customer")
    private List<Account> accountList;
    

    与其他关系相同。