【问题标题】:QueryDSL & PostgreSQL enums?QueryDSL 和 PostgreSQL 枚举?
【发布时间】: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 枚举,然后使用插件类型映射手动将 customercustomertype 列绑定到它定义。问题是这应该怎么做?我想我必须创建一个转换器类

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


【解决方案1】:

您的StringToCustomerType 方法看起来很合理。它应该提供预期的枚举映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2020-08-17
    • 2015-03-04
    • 2023-03-10
    • 2013-01-29
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多