我有 2 个数据库表:
- 保留一个类,该类有一个类型为枚举的字段。在相应的列中,存储枚举值的序数。
- 保留枚举值的序号和名称。
如何使用 Hibernate 映射将表 1 中的枚举序数映射到表 2 中存储的名称?
编辑:基本上,通过 SQL SELECT,我将使用序号连接 2 个表来获取名称。不过,我不确定如何在 hibernate 状态下做到这一点。
这不是重复的;我没有使用 Hibernate 逆向工程。
您可以将 Java 端设置为:
@Enumerated(EnumType.ORDINAL)
@Column(name = "user_type")
private UserType userType;
public enum UserType {
CLIENT,
ADMIN;
}
和 SQL 端: 创建表用户( id bigint 主键, user_type bigint NOT NULL );
CREATE TABLE enum_user_type (
id bigint PRIMARY KEY,
name varchar(255),
desc text
);
ALTER TABLE user ADD CONSTRAINT user_type_fk FOREIGN KEY (user_type) REFERENCES enum_user_type(id);
INSERT INTO enum_user_type (id, name, desc) VALUES ( 0, 'CLIENT', 'This is a client');
INSERT INTO enum_user_type (id, name, desc) VALUES ( 1, 'ADMIN', 'This is an admin');
所以在java中你总是设置:
user.setUserType(UserType.ADMIN);
在用户表中,枚举使用序号存储。
由于您已经有一个枚举关联表,因此您可以在具有 native 查询的 SQL JOIN 中使用它。
如果您发现需要使用 HQL 来获取枚举名称或描述,那么也许应该将枚举提升为实体。
我是一名优秀的程序员,十分优秀!