Spring 春季数据JPA赢得';t手柄组<;Enum>;正确地
我正在试用Spring Boot(最新版本,使用Hibernate 4.3.7),但我的Spring 春季数据JPA赢得';t手柄组<;Enum>;正确地,spring,hibernate,spring-boot,jpa,spring-data-jpa,Spring,Hibernate,Spring Boot,Jpa,Spring Data Jpa,我正在试用Spring Boot(最新版本,使用Hibernate 4.3.7),但我的用户实体有问题。这里是(最重要的部分): 问题是,当我向角色集添加一些角色时,Hibernate不会保存它。它将创建引用表,但只将数据插入User表 我试图解决这个问题,所以我创建了纯Java+Hibernate项目,并将User类复制到其中。你猜怎么着?成功了 有趣的事实是,当我在第二个项目中使用纯Hibernate时,创建的角色表看起来与在Spring Boot项目中创建的表不同 在我的cleanHibe
用户
实体有问题。这里是(最重要的部分):
问题是,当我向角色集添加一些角色时,Hibernate不会保存它。它将创建引用表,但只将数据插入User
表
我试图解决这个问题,所以我创建了纯Java
+Hibernate
项目,并将User
类复制到其中。你猜怎么着?成功了
有趣的事实是,当我在第二个项目中使用纯Hibernate
时,创建的角色
表看起来与在Spring Boot
项目中创建的表不同
在我的cleanHibernate
项目中,我有如下表格:
User_roles:
User_Id bigInt(20)
roles int(11)
在使用SpringJPA时,我得到了
user_roles (notice lower case)
User (no "_id" part)
roles
发生什么事了?我做错了什么?它与Spring Boot
配置有关吗?谢谢。以下表格应与您现有的表格相匹配
@Entity
@Table("usr")
public class User {
public static enum Role {
UNVERIFIED, BLOCKED, ADMIN
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ElementCollection
@CollectionTable(name = "User_roles", joinColumns = @JoinColumn(name = "User_Id")
private Set<Role> roles = new HashSet<Role>();
(rest of properties, getters and setters etc)
}
@实体
@表(“usr”)
公共类用户{
公共静态枚举角色{
未验证、阻止、管理
}
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@元素集合
@CollectionTable(name=“User\u roles”,joinColumns=@JoinColumn(name=“User\u Id”)
私有集角色=新HashSet();
(其余属性、getter和setter等)
}
谢谢您的输入,但我的问题不是匹配现有表,而是不同的行为或纯hibernate与Spring数据JPA+保存相关的枚举集@Column
似乎是错误的。请尝试删除它。还可以尝试将该枚举移动到其自己的文件中。可以通过设置Spring.JPA.hibernate.naming_strategy=或更改命名策略g、 hibernate.cfg.EJB3NamingStrategy
user_roles (notice lower case)
User (no "_id" part)
roles
@Entity
@Table("usr")
public class User {
public static enum Role {
UNVERIFIED, BLOCKED, ADMIN
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ElementCollection
@CollectionTable(name = "User_roles", joinColumns = @JoinColumn(name = "User_Id")
private Set<Role> roles = new HashSet<Role>();
(rest of properties, getters and setters etc)
}