使用Hibernate Annotations注释EnumMap <k,v =“”> </k,>

时间:2010-12-22 10:53:09

标签: java hibernate spring annotations

只是一个简单的问题:

我想在我的一个实体类中使用EnumMap。

有没有特别的方法来注释这些? 如果我没有明确地注释它会怎么样?

更具体:我希望Key作为String值而不是int值持久化。

欢呼声

2 个答案:

答案 0 :(得分:5)

如果地图的键是枚举,您可以使用注释@MapKeyEnumerated(STRING):http://download.oracle.com/javaee/6/api/javax/persistence/MapKeyEnumerated.html

答案 1 :(得分:2)

我提交了HashMap<Enum, List<Object>>

的示例

在这种情况下,对象是自定义类Person

@Entity
@Table(name="Tasks")
@Access(AccessType.FIELD)
public class Task implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id; 

@OneToMany(cascade={CascadeType.ALL,CascadeType.PERSIST})
@MapKeyEnumerated(EnumType.STRING)
private Map<Role,PersonBag> persons;

[...]
}

PersonBag:

@Entity
@Table(name="Person_Bags")
public class PersonBag implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @ManyToMany
    @JoinColumns({
        @JoinColumn(name="PersonBag_Id",referencedColumnName="Id"),
        @JoinColumn(name="Person_Id",referencedColumnName="Id")
    })
    private List<Person> persons;
[...]
}