我的域名对象大致如下:
@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不能为空。
我只想在没有验证的情况下返回瞬态实例。我该怎么办呢。
答案 0 :(得分:2)
entityManager.detach(accountInstance)
(或entityManager.clear()
,如果您使用JPA 1.0来分离所有实体)使实体分离,并且仅对其进行任何更改。如果您使用Hibernate会话,请使用Session.evict()方法。 PS:我认为你有一个错误,其中mapped
属性的一侧缺少双向关系。例如Customer
你应该有类似
@OneToMany(cascade=CascadeType.ALL, mappedBy="customer")
private List<Account> accountList;
与其他关系相同。