【问题标题】:Hibernate Converting 'NVARCHAR' to 'Serializable' on creating pojo classes from Sql Server tablesHibernate 在从 Sql Server 表创建 pojo 类时将“NVARCHAR”转换为“Serializable”
【发布时间】:2015-08-26 10:24:46
【问题描述】:

我正在使用 Hibernate 4.3 从 Sql Server 表创建 POJO 类和映射文件。但它正在将所有“nvarchar”字段创建为“Serializable”。我希望它们是“字符串”类型。

在我提到的 reveng.xml 文件中 -

<type-mapping>
    <sql-type jdbc-type="NVARCHAR" hibernate-type="string" />
    <sql-type jdbc-type="VARCHAR" hibernate-type="string" />
</type-mapping>

但没有帮助。

我的逆向工程文件是 -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate     Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
 <hibernate-reverse-engineering>  
<schema-selection match-catalog="Copy_Up-Tourism" match-schema="dbo"/>
 <type-mapping>
    <sql-type jdbc-type="NVARCHAR" hibernate-type="string" />
    <sql-type jdbc-type="VARCHAR" hibernate-type="string" />
</type-mapping>
<table-filter match-name="Contents"/>
 <table-filter match-name="CategoryDatas"/>
<table-filter match-name="TileExperience"/>
<table-filter match-name="PushTypes"/>
<table-filter match-name="DestinationDatas"/>
<table-filter match-name="PlaceDatas"/>
<table-filter match-name="EventDatas"/>
<table-filter match-name="YoutubeVideoTag"/>
<table-filter match-name="PushManagers"/>
<table-filter match-name="Activities"/>
<table-filter match-name="Languages"/>
<table-filter match-name="Categories"/>
</hibernate-reverse-engineering>

我在 SO 中尝试了许多解决方案,例如 Link,但没有任何帮助。请帮忙

【问题讨论】:

  • 尝试添加VARCHAR
  • 是的,我做到了。但没有帮助。请看我的更新
  • 这个文件是你手动创建的,还是之前就有的?
  • 我使用 Netbeans 中的 Hibernate 逆向工程向导创建了它。然后手动更新文件以包含类型映射。
  • ok 尝试:java.lang.String 代替字符串,并清理/重建项目,maven-> 更新

标签: java sql-server hibernate serialization


【解决方案1】:

请执行以下操作:

改变这个:

<sql-type jdbc-type="NVARCHAR" hibernate-type="string" />

到这里:

<sql-type jdbc-type="NVARCHAR" hibernate-type="java.lang.String" />

在您的 jdbc.properties 文件中添加:

对于oracle

hibernatetool.metadatadialect=org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect 

对于其他人:

H2MetaDataDialect 用于解决 H2 数据库中的调整的方言

JDBCMetaDataDialect 使用标准 JDBC 读取元数据的方言

MySQLMetaDataDialect使用mysql读取元数据的方言

然后照常执行:

  1. maven -> 更新
  2. 清理/重建项目

【讨论】:

  • 我在上面的代码中将“string”更改为“java.lang.String”,重建项目并重新创建 POJO 类,但仍然是同样的问题。
  • 您是否在 jdbc.properties 文件中添加了更改?
【解决方案2】:

我的 reveng 文件是这样的

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
    <type-mapping>
        <sql-type jdbc-type="NVARCHAR" hibernate-type="string" />
    </type-mapping>
    <table-filter match-name="TempTable"/>
</hibernate-reverse-engineering>

已创建 POJO

public class TempTable  implements java.io.Serializable {


     private int tempId;
     private String data;

    public TempTable() {
    }


    public TempTable(int tempId) {
        this.tempId = tempId;
    }
    public TempTable(String data) {
       this.data = data;
    }

    public int getTempId() {
        return this.tempId;
    }

    public void setTempId(int tempId) {
        this.tempId = tempId;
    }
    public String getData() {
        return this.data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

结论只是添加

 <type-mapping>
        <sql-type jdbc-type="NVARCHAR" hibernate-type="string" />
 </type-mapping>

报复文件 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 2017-05-06
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    相关资源
    最近更新 更多