Vivek Mishra
Vivek Mishra

Reputation: 1794

Hibernate Converting 'NVARCHAR' to 'Serializable' on creating pojo classes from Sql Server tables

I am creating POJO classes and mapping files from Sql Server table by using Hibernate 4.3. But It is creating all 'nvarchar' fields to 'Serializable'. I want them to be 'String' type.

In my reveng.xml file I mentioned -

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

but no help.

My Reverse Engineering file is -

<?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>

I tried many solutions in SO like Link but no help. Please help

Upvotes: 3

Views: 1779

Answers (2)

Tanuj Verma
Tanuj Verma

Reputation: 398

My reveng file is like

<?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 created

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;
    }
}

Conclusion just add

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

to reveng file :)

Upvotes: 0

GingerHead
GingerHead

Reputation: 8230

Please do the following:

Change this:

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

To this:

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

Add in your jdbc.properties file:

For oracle:

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

For others:

H2MetaDataDialect dialect for work around tweaks in the H2 database

JDBCMetaDataDialect dialect that uses standard JDBC for reading metadata

MySQLMetaDataDialect dialect that uses mysql for reading metadata

Then as usual perform:

  1. maven -> update
  2. clean/rebuild project

Upvotes: 4

Related Questions