我有一个hibernate pojo类,它在@UniqueConstraint
中指定了3个字段(一起唯一),其中3个字段中的一个是nullable=true
。
当我尝试使用session.update(pojo)
更新条目时,它会更新数据库中与2个字段(不可为空)相匹配的所有条目,hibernate在查询时是否会避免可空字段?还是有什么我应该知道的呢?
编辑:添加了课程
@Entity
@Table (name = "details",
uniqueConstraints = {@UniqueConstraint(columnNames = {"service_id", "billing_item_id", "service_type_id"}, name="UK_name_it")}
)
public class Detail implements Serializable {
@ManyToOne
@JoinColumn(name = "service_id")
@ForeignKey(name = "FK_name2")
@Id
private Service service;
@ManyToOne
@JoinColumn(name="billing_item_id")
@ForeignKey(name = "FK_name3")
@Id
private BillingItem billingItem;
@ManyToOne
@JoinColumn(name="currency_id")
@ForeignKey(name = "FK_name4")
private Currency currency;
@ManyToOne
@JoinColumn(name="service_type_id")
@ForeignKey(name = "FK_name5")
private ServiceType serviceType;
@Column(name = "completed", nullable = false)
private boolean completed;
}
答案 0 :(得分:0)
在复合键中有一个nullable
字段似乎没有这样的选项,所以我不得不在表中添加一个autoincrement
整数主键,并在@UniqueConstraint
中保留service,billingItem和serviceType字段。
我可以采用另一个选项,在某些情况下可以添加serviceType
,这被视为All
条目(基本上当serviceType为null时,它适用于所有serviceTypes。)而不是使用null
for serviceType指向此条目,这样我们可以PK
,而不需要使serviceType成为nullable
字段。