Hibernate是地图字段

时间:2017-03-16 18:52:14

标签: java mysql spring hibernate

问题:无法将值插入存储库,因为表关系构建不正确。

我有一个带有spring boot和hibernate构建表的h2 sql server。在创建期间,创建的表少于预期。在创建期间,它将Customer_foos,StockItems_foos和Employees_foos分组到一个表中。这些列仍然在'表格中分配。好像他们还是分开的。

例如{ table_foo

| table_name not null varchar | Customer_foos_id not null Integer | Customer_foos_key not null varchar | StockItems_foos_id not null Integer | StockItems_foos_values varchar | ...

与所需的相比,每个地图都有自己的表格。这样可以避免输入空值时的错误:

table_Customer_foos

| table_name not null varchar | Customer_foos_id not null Integer | Customer_foos_key not null varchar | 

和table_StockItems_foos

| table_name not null varchar | StockItems_foos_id not null Integer | StockItems_foos_key varchar |

}

表格设置在一个非常明确的前瞻性问题中,主要实体设置为

@Entity
public class table{
    @Id
    @NonNull
    public String 
        Name;

    @OneToMany(cascade= CascadeType.ALL)
    @Nullable
    public Map<String, Foo>
        Customer_foos,
        StockItems_foos,
        Employees_foos;

    ...
}

将副实体作为

@Entity
public class Foo{
    @Id
    @GeneratedValue
    public Integer 
        Id;

    @Nullable
    public Double
        Percentage,
        Quantity;

    ...
}

Spring 1.4.5 with default dependancies。

1 个答案:

答案 0 :(得分:0)

我能够通过为每个地图字段创建一个实体包装来规避这个不幸事件,然后Hibernate为每个地图字段创建一个新表。

我不认为这是一个正确的答案,但它确实有效。

就这样

@Entity
public class Customer_Foos extends Map<String, Foo>{
    ...
}