Hibernate CollectionOfElements不会在SQL Server中自动创建表

时间:2009-10-29 16:24:46

标签: java mysql sql-server-2005 hibernate jpa

使用自动更新(hibernate.hbm2ddl.auto = update)我有一个实体可以创建两个表: myentity和myentityconfigurationProperties。 这在Mysql 5中运行良好,但在SQL Server 2005中它不会创建属性表。

任何人都知道这件事吗?我自己没有尝试创建表,我想避免这种情况,所以我不知道它是否在SQL服务器中工作,但它在Mysql中工作正常。

这是实体(简化):

@Entity
public class MyEntity  {
    Map<String, String> configurations = new HashMap<String, String>();
    long id = -1;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    @CollectionOfElements(fetch = FetchType.EAGER)
    @JoinTable(
            name = "myentityconfigurationProperties",
            joinColumns = @JoinColumn(name = "id")
    )
    @org.hibernate.annotations.MapKey(
            columns = @Column(name = "propertyKey")
    )
    @Column(name = "propertyValue", nullable = false)
    @Cascade(value = org.hibernate.annotations.CascadeType.ALL)
    public Map<String, String> getConfigurations() {
        return configurations;
    }

    public void setConfigurations(Map<String, String> configurations) {
        this.configurations = configurations;
    }

}

1 个答案:

答案 0 :(得分:0)

错误是SQL服务器不允许空键,MySQL显然会处理这些空键。 所以修复是:

@org.hibernate.annotations.MapKey(
        columns = @Column(name = "propertyKey", nullable = false)