在JPA中未创建唯一约束

时间:2010-05-31 14:19:26

标签: mysql jpa jboss unique-constraint

我创建了以下实体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;
}

5 个答案:

答案 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);

另请参阅:https://stackoverflow.com/a/3498242/1244488

答案 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)