不将枚举值保存在数据库中,我想就是这样,或者我不明白,我试图保存,因为控制台向我显示了数据,但是当我从数据库询问时,我得到了另一个值
@Entity
@Table(name = "User")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "name")
private String name;
@Column(name = "password")
private String password;
@Column(unique = true, name = "email")
private String email;
@Column(name="rol")
Rol rol;
@Column(name = "life")
Life life;
public User() {
}
}
我在.info中有此邮件,显示此消息“ OWNER”
Set<User> users =new HashSet<>();
log.info("CONSOLE"+ user.getRol());
users.add(user);
meet.setUsers(users);
return meetRepository.save(meet);
但是大张旗鼓我得到了其他价值 ROL:参与者
[
{
"id": 1,
"name": "string2",
"state": "pause",
"bet": {
"profit": 0,
"inversion": 0
},
"users": [
{
"id": 1,
"name": "string",
"password": "string",
"email": "ema",
"rol": "PARTICIPANT",
"life": "suspend"
}
]
}
]
答案 0 :(得分:1)
如果您的字段角色和生命是枚举,则必须使用@Enumerated
将其声明为枚举。有两种选择。默认将存储序数。或者,您可以选择使用字符串名称存储在数据库中。就可维护性而言,这是更好的选择:
@Enumerated(EnumType.STRING)
@Column(name="rol")
Rol rol;
@Enumerated(EnumType.STRING)
@Column(name = "life")
Life life;
两句话:
当数据库字段具有与属性相同的名称时,可以省略@Column。如果表的名称与实体的名称相同,则@Table注记也是如此。
阅读有关Enums和JPA的更多信息,如果您真的应该在我的一篇文章中使用它:https://72.services/de/should-you-use-enums-with-jpa/
答案 1 :(得分:0)
如上所述,将枚举保存到数据库时,可以选择将其保存为字符串或数字序数。数值选项非常痛苦,因为每次您需要更新枚举值或更改值的顺序时,都会将字段的数据库选项弄乱。即使将字符串存储在数据库中,另一件事也是非常痛苦的事情是,当您使用某些ORM(例如Hibernate)并且您具有NULL值时。因此,请将枚举保留为字符串,并避免使用NULL值。