Hibernate在查询中避免可空的唯一字段?

时间:2015-02-25 04:18:46

标签: java hibernate

我有一个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;
}

1 个答案:

答案 0 :(得分:0)

在复合键中有一个nullable字段似乎没有这样的选项,所以我不得不在表中添加一个autoincrement整数主键,并在@UniqueConstraint中保留service,billingItem和serviceType字段。

我可以采用另一个选项,在某些情况下可以添加serviceType,这被视为All条目(基本上当serviceType为null时,它适用于所有serviceTypes。)而不是使用null for serviceType指向此条目,这样我们可以PK,而不需要使serviceType成为nullable字段。