Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NetBeans Hibernate反向工程数据类型不匹配_Java_Sql Server_Hibernate_Netbeans_Reverse Engineering - Fatal编程技术网

Java NetBeans Hibernate反向工程数据类型不匹配

Java NetBeans Hibernate反向工程数据类型不匹配,java,sql-server,hibernate,netbeans,reverse-engineering,Java,Sql Server,Hibernate,Netbeans,Reverse Engineering,我对Hibernate很陌生,因为我一直使用纯JDBC。我试图通过对SQL Server数据库使用NetBeans的反向工程过程来配置实体。我遵循了NetBeans的网页教程,我能够在我的项目中创建一个包含所有实体的新包,但是当我在HQL编辑器中从国家运行这个简单的查询时,我得到了以下错误: org.hibernate.type.SerializationException: could not deserialize at org.hibernate.util.Serializatio

我对Hibernate很陌生,因为我一直使用纯JDBC。我试图通过对SQL Server数据库使用NetBeans的反向工程过程来配置实体。我遵循了NetBeans的网页教程,我能够在我的项目中创建一个包含所有实体的新包,但是当我在HQL编辑器中从国家运行这个简单的查询时,我得到了以下错误:

org.hibernate.type.SerializationException: could not deserialize
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:217)
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:240)
    at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:82)
    at org.hibernate.type.SerializableType.get(SerializableType.java:39)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154)
    at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2096)
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1380)
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1308)
    at org.hibernate.loader.Loader.getRow(Loader.java:1206)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
    at org.hibernate.loader.Loader.doQuery(Loader.java:701)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
Caused by: java.io.StreamCorruptedException: invalid stream header: 32003300
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:252)
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:209)
    ... 23 more
org.hibernate.type.SerializationException:无法反序列化
位于org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:217)
位于org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:240)
位于org.hibernate.type.SerializableType.fromBytes(SerializableType.java:82)
位于org.hibernate.type.SerializableType.get(SerializableType.java:39)
位于org.hibernate.type.NullableType.nullablesafeget(NullableType.java:163)
位于org.hibernate.type.NullableType.nullablesafeget(NullableType.java:154)
位于org.hibernate.type.AbstractType.hydroge(AbstractType.java:81)
位于org.hibernate.persister.entity.AbstractEntityPersister.hydroge(AbstractEntityPersister.java:2096)
位于org.hibernate.loader.loader.loadFromResultSet(loader.java:1380)
位于org.hibernate.loader.loader.instanceNotYetLoaded(loader.java:1308)
位于org.hibernate.loader.loader.getRow(loader.java:1206)
位于org.hibernate.loader.loader.getRowFromResultSet(loader.java:580)
位于org.hibernate.loader.loader.doQuery(loader.java:701)
在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:236)上
位于org.hibernate.loader.loader.doList(loader.java:2220)
位于org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2104)
位于org.hibernate.loader.loader.list(loader.java:2099)
位于org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
位于org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
位于org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
位于org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
在org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)上
原因:java.io.StreamCorruptedException:无效的流标头:32003300
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
位于java.io.ObjectInputStream。(ObjectInputStream.java:279)
位于org.hibernate.util.SerializationHelper$CustomObjectInputStream。(SerializationHelper.java:252)
位于org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:209)
... 23多
Country.hbm.xml文件包含以下内容:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 08-may-2014 0:02:21 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="Entity.Country" table="Country" schema="dbo" catalog="TestOTDB">
        <id name="countryId" type="string">
            <column name="Country_ID" length="36" />
            <generator class="assigned" />
        </id>
        <property name="countryName" type="serializable">
            <column name="Country_Name" not-null="true" />
        </property>
        <property name="countryDescription" type="serializable">
            <column name="Country_Description" />
        </property>
        <property name="countryCode" type="serializable">
            <column name="Country_Code" not-null="true" />
        </property>
        <set name="sites" inverse="true">
            <key>
                <column name="Site_CountryID" length="36" />
            </key>
            <one-to-many class="Entity.Site" />
        </set>
    </class>
</hibernate-mapping>

问题是,所有出现“serializable”的类型都应该是SQL Server数据库中的varchar。 有人知道吗


谢谢

我终于找到了解决这个问题的方法。在某些情况下,似乎应该强制使用hibernate数据类型(我不确定它取决于什么…),在我的情况下,所有来自SQL Server的字符串和/或文本列都应该强制使用
java.lang.string
,方法是将
类型映射
添加到hibernate.reveng.xml文件中:

<?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="DB_Name" match-schema="dbo"/>
    <type-mapping>
        <sql-type jdbc-type="VARCHAR" hibernate-type="java.lang.String" />
        <sql-type jdbc-type="NVARCHAR" hibernate-type="java.lang.String" />
        <sql-type jdbc-type="NCHAR" hibernate-type="java.lang.String" />
    </type-mapping>
    <table-filter match-name="Table1"/>
    <table-filter match-name="Table2"/>
    <table-filter match-name="TableN"/>
</hibernate-reverse-engineering>

希望这对其他人有帮助