【发布时间】:2015-05-23 17:47:36
【问题描述】:
我们将 QueryDSL 与 PostgreSQL 数据库一起使用,并首先构建我们的域数据库。我们的 Java 域 bean 是使用 QueryDSL Maven 插件版本 3.6.1 自动生成的。
首先,是否可以将 QueryDSL 插件配置为从 PostgreSQL 数据库枚举类型自动生成 Java 枚举?例如:
当我们有一个枚举时:
CREATE TYPE customertype AS ENUM ('person','company');
用作列类型:
CREATE TABLE customer (customertype customertype,...
我想让 Java 类生成为:
public class Customer {
private CustomerType customerType;
...和引用的枚举为:
public enum CustomerType {
PERSON,
COMPANY,
}
从我搜索了很长一段时间后了解到的情况来看,这可能不适用于插件的当前功能?
在这种情况下,显然要走的路是手动定义 Java 枚举,然后使用插件类型映射手动将 customer 表 customertype 列绑定到它定义。问题是这应该怎么做?我想我必须创建一个转换器类
public class StringToCustomerType extends EnumAsObjectType<CustomerType>
并在类型映射中使用它
<typeMapping>
<table>customer</table>
<column>customertype</column>
<type>com.example.StringToCustomerType</type>
</typeMapping>
或者有没有更好的方法来实现想要的情况?
显然解决问题的粗略方法是在JDBC连接字符串中定义stringtype=unspecified,将要映射的列定义为字符串并直接使用枚举字符串值作为when将值放置到域对象中。不过,这听起来不像是一个可靠的解决方案。
所有建议和意见将不胜感激!谢谢!
【问题讨论】:
-
我对 QueryDSL 完全不熟悉,但是如果您将枚举字段视为 JPA
@Enumerated(STRING)并将枚举命名为与数据库值相同的名称,则 Postgres Hibernate 驱动程序将透明地工作。告诉 QueryDSL 将枚举视为字符串是否可行?
标签: java postgresql maven enums querydsl