【问题标题】:JPA how to define @Table with ORGANIZE BY ROWJPA如何使用ORGANIZE BY ROW定义@Table
【发布时间】:2016-05-24 16:24:11
【问题描述】:

在使用 JPA 定义表时,是否可以更改指定“ORGANIZE BY ROW”参数?我正在处理的代码是

@Entity
@Table(name = "ANSWERS")
public class AnswerEntity {    
    @Id
    @Column(name = "CLASS")
    private String answerClass;

    @Lob
    @Column(name = "TEXT", unique = false, nullable = false)
    private String answerText;
}

我想添加一个相当于

的“ORGANIZE BY ROW”
CREATE TABLE ANSWERS ( CLASS VARCHAR(256), TEXT CLOB(1000000) NOT NULL ) ORGANIZE BY ROW;

【问题讨论】:

  • 即使有可能(我不知道是不是这样),您也不应该将数据库表的物理实现细节与 JPA 提供的抽象混为一谈。

标签: jpa db2 ibm-cloud openjpa dashdb


【解决方案1】:

看起来您可以继承 org.apache.openjpa.jdbc.sql.DB2Dictionary 并覆盖:

getCreateTableSQL

public String[] getCreateTableSQL(Table table) 返回一系列 SQL 语句来创建给定的表, 完成与列。索引和约束将分别创建。

public class CutomDB2Dictionary extends DB2Dictionary{

    @Override
    public String getCreateTableSQL(Table table){
        String sql = super.getCreateTableSQL(table);

        if(table.getName().equalsIgnoreCase("ANSWERS")){
            sql += " ORGANIZE BY ROW";
        }

        return sql;
    }
}

在配置中指定您的自定义 DB2 字典:

<property name="openjpa.jdbc.DBDictionary" value="com.test.CutomDB2Dictionary "/>

【讨论】:

  • 您是否尝试过在带有 javaee7.0 的 bluemix 中使用它。我无法使用 DashDB 为我的 JPA 工作。 DashDB 默认使用按列组织,而 JPA 不能很好地使用它。所以我尝试设置按行组织的创建查询。我非常希望您的解决方案适用于 dashdb,但无法使其正常工作。你能帮忙吗?
  • 我建议在 Bluemix 支持下将此作为查询提出。这应该“开箱即用”,因此可能存在需要解决的潜在产品问题。
  • DB2Dictionary 类在哪个maven包中?
  • 没有。它适用于 OpenJpa。
猜你喜欢
  • 2023-03-17
  • 2012-08-07
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 2021-09-02
  • 2016-06-23
  • 1970-01-01
相关资源
最近更新 更多