我创建了以下实体bean,并将两列指定为唯一。现在我的问题是创建的表没有唯一约束,并且日志中没有错误。 有没有人有想法?
@Entity
@Table(name = "cm_blockList", uniqueConstraints = @UniqueConstraint(columnNames = {"terminal", "blockType"}))
public class BlockList {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name="terminal")
private Terminal terminal;
@Enumerated(EnumType.STRING)
private BlockType blockType;
private String regEx;
}
答案 0 :(得分:6)
好吧,我找到了另一种制作设计的方法。更多是因为设计的演变而不是解决方案
然而,我从一位同事那里听到了同样的问题,那就是在创建整个数据库时,hibernate(我们运行JBoss 4.3)只创建了唯一约束。在现有数据库中创建新表时,它将不起作用
因此,在persistence.xml中,必须将hibernate.hbm2ddl.auto
设置为create-drop
才能使其正常工作。我不能证实这一点。
答案 1 :(得分:2)
您不必删除所有内容,只需删除要为
创建唯一索引的特定表答案 2 :(得分:0)
更多的建议而不是真正的答案...
您应该澄清您用于此类问题的JPA提供商(以及版本)。
我注意到您的某个列是ManyToOne
关联的一部分,这可能是您的JPA提供程序无法很好处理的“特殊”情况。由于处理不当,我的意思是错误。我会检查问题跟踪器是否存在问题(并且可能会创建一个新问题,您的情况似乎符合JPA标准)。
答案 3 :(得分:0)
如果你想要唯一约束,你应该通过sql:
来做ALTER TABLE cm_blockList ADD CONSTRAINT cm_blockList_unq UNIQUE (terminal);
答案 4 :(得分:0)
我也遇到了同样的问题,但在映射文件中添加unique-key="UK1_test"
工作正常。
<property name="hibernate.hbm2ddl.auto">create</property>
在映射文件中创建unique-key="UK1_test" unique="true"
alter table employee add constraint UK1_test unique (addrId)