每个人。我有一对多关系的客户和服务表 - 一个客户可以没有或有很多服务。Service 表有一个 customer_id 列,它是一个引用 Customer 表主键的外键。从数据库中检索客户时,我只需要获取相关服务的 ID,这就是我决定使用@ElementCollection注释的原因。我的客户映射如下:
@Entity
@Table(name = "customer")
public class CustomerEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(nullable = false)
private String name;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "service", joinColumns = @JoinColumn(name = "customer_id", updatable = false, insertable = true))
@Column(name = "id", updatable = false, insertable = true)
private Set<Integer> serviceIds;
}
当我从数据库中获取数据时,一切都很完美。问题是当我尝试更新数据库中的客户时。如果客户实体的serviceIds成员设置为 null 或空集,则更新 Hibernate 会删除所有引用更新客户的服务表行。我想避免这种行为。我希望这个serviceIds成员对于 Hibernate 是只读的,并且当客户在数据库中更新时被忽略 - 即我只想更新客户表而不是其他任何东西。是否可以使用ElementCollection来实现这一点?
顺便说一句,我尝试了以下映射,即使我将serviceIds设置为 null 或空集,客户的更新也不会导致服务表中的任何删除。
@OneToMany
@JoinColumn(name = "customer_id", referencedColumnName = "id", updatable = false, insertable = false)
private Set<ServiceEntity> serviceIds;
感谢您的帮助。