sinat_28220307 2015-11-18 09:11 采纳率: 100%
浏览 1539

hibernate 枚举一对多该怎么做?

例如说我有个类用户,还有个角色枚举。那么如果一个用户有多个角色枚举的标签的话,想用hibernate的一对多,那么怎么对枚举进行映射。跪求一个解决方案,角色枚举只能是枚举。不用一对多也可以。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 19:52
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Hibernate中,你可以使用@Enumerated注解来指定字段的数据类型为枚举类型。以下是一个简单的示例:

    import org.hibernate.annotations.Type;
    import org.hibernate.annotations.TypeDef;
    
    import javax.persistence.*;
    import java.util.Set;
    
    @Entity
    @Table(name = "users")
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        @Column(name = "username")
        private String username;
    
        @Enumerated(EnumType.STRING)
        @ManyToMany(mappedBy = "users", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
        private Set<Role> roles;
    
        // getters and setters
    }
    

    在这个例子中,我们定义了一个名为User的实体,它有一个用户名和一个角色集合。我们使用@ManyToOne注解来关联两个表,并且使用@JoinColumn注解来设置外键。

    然后,我们在@Entity注解上添加了@TypeDef注解,这告诉Hibernate将角色数据类型转换为字符串(因为在关系型数据库中,角色通常存储为字符串)。

    最后,我们在roles字段上使用@Enumerated注解,这告诉Hibernate将角色值转换为枚举类型。这样,当我们将roles字段绑定到Role实体时,Hibernate就知道如何处理这些值。

    注意:这个方法只适用于Java 8及以上版本的Spring Boot项目。如果你使用的是旧版的Spring Boot,你需要手动处理字符串转为枚举的问题。

    评论

报告相同问题?