创建完hibernate之后写了一个测试类,结果出现了这个错误,请高手指点。

一点点小无奈 2012-07-09 05:32:16
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: insert into HibernateDB.dbo.UserMess (UserName, UserEmail, UserTitle, UserAddress, UserContext) values (?, ?, ?, ?, ?)
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [ex.UserMess]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
at ex.hibernateTest.main(hibernateTest.java:21)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不允许从数据类型 nvarchar 到 varbinary 的隐式转换。请使用 CONVERT 函数来运行此查询。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:156)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1373)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:371)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:322)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4003)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1550)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:160)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:133)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:290)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
... 16 more


hibernate.cfg.xml文件如下:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

<session-factory>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="connection.url">
jdbc:sqlserver://127.0.0.1:1433;DatabaseName=hibernateDB
</property>
<property name="connection.username">sa</property>
<property name="connection.password">123</property>
<property name="connection.driver_class">
com.microsoft.sqlserver.jdbc.SQLServerDriver
</property>
<property name="myeclipse.connection.profile">
JDBC_Driver
</property>
<property name="show_sql">true</property>
<mapping resource="ex/UserMess.hbm.xml" />

</session-factory>

</hibernate-configuration>

测试类如下:
package ex;

import org.hibernate.Session;
import org.hibernate.Transaction;

import ex.hibernate.HibernateSessionFactory;

public class hibernateTest {
public static void main(String[] args) {
Session session =HibernateSessionFactory.getSession();
UserMess um=new UserMess();
um.setUserId("37048119900512586");
um.setUserName("xy");
um.setUserAddress("shandong.tengzhou");
um.setUserContext("Java");
um.setUserEmail("xy_java@163.com");
um.setUserTitle("Think in Java");

Transaction tx=session.beginTransaction();
tx.begin();
session.save(um);
tx.commit();
session.close();

}

}

用到的数据库表,hibernate生成的UserMess.hbm.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="ex.UserMess" table="UserMess" schema="dbo" catalog="HibernateDB">
<id name="userId" type="java.lang.String">
<column name="UserID" length="50" />
<generator class="native" />
</id>
<property name="userName" type="java.lang.String">
<column name="UserName" length="50" />
</property>
<property name="userEmail" type="java.lang.String">
<column name="UserEmail" />
</property>
<property name="userTitle" type="java.lang.String">
<column name="UserTitle" length="50" />
</property>
<property name="userAddress" type="java.lang.String">
<column name="UserAddress" length="50" />
</property>
<property name="userContext" type="java.lang.String">
<column name="UserContext" length="50" />
</property>
</class>
</hibernate-mapping>
求指点。
...全文
116 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一点点小无奈 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
at ex.hibernateTest.main(hibernateTest.java:21)

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不允许从数据类型 nvarchar 到 varbinary 的隐式转换。请使用 CONVERT 函数来运行此查询。
[/Quote]


如何转换呢?
huyupu1991 2012-07-26
  • 打赏
  • 举报
回复
可以参考下convert的用法 http://www.w3school.com.cn/sql/func_convert.asp
teddyboy1992 2012-07-09
  • 打赏
  • 举报
回复
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不允许从数据类型 nvarchar 到 varbinary 的隐式转换。请使用 CONVERT 函数来运行此查询。
在你的SQL语句中,要用CONVERT 函数,把数据类型 nvarchar 转换到 varbinary,极有可能需要把数据库列“UserID”要进行这样的转换
五哥 2012-07-09
  • 打赏
  • 举报
回复
at ex.hibernateTest.main(hibernateTest.java:21)

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不允许从数据类型 nvarchar 到 varbinary 的隐式转换。请使用 CONVERT 函数来运行此查询。


67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧