JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Object Relational Mapping » Hibernate  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
作者 Hibernate Custom SQL for create, 自訂SQL insert語法
violet90079





發文: 4
積分: 0
於 2013-04-10 18:44 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
各位好:

最近開始使用到Hibernate,接觸到了 Custom SQL for create, update and delete

官方文件如連結:
http://docs.jboss.org/hibernate/orm/3.5/reference/en/html/querysql.html#querysql-cud

映射檔配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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">
 
<hibernate-mapping>
  <class name="test.TestVO" table="test">
 
    <id name="tbid" column="tbid">
      <generator class="native" />
    </id>
    <property name="testchar" column="testchar" />
    <property name="applytime" column="applytime" />
    <property name="replytime" column="replytime" />
    <property name="testchar2" column="testchar2" />
    
    <sql-insert>
      INSERT INTO test (testchar, applytime, testchar2) VALUES (UPPER(?), sysdate(), ?)
    </sql-insert>
  </class>
</hibernate-mapping>


applytime是想透過sysdate()直接使用資料庫時間(考慮Server跟DB時間可能不同,要以DB時間為準)

但是在執行時發生例外,例外如下:
INFO TimestampType:164 - could not bind value 'null' to parameter: 3; Parameter index out of range (3 > number of parameters, which is 2).

DAO片段程式碼
1
2
3
4
5
6
7
8
9
10
11
public void insertBySession(TestVO testVO) {
  Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  try {
    session.beginTransaction();
    session.save(testVO);
    session.getTransaction().commit();
  } catch (RuntimeException ex) {
    session.getTransaction().rollback();
    throw ex;
  }
}


測試用的main方法片段
1
2
3
4
5
6
7
public static void main(String[] args) {
  TestDAO dao = new TestDAO();
  TestVO testVO = new TestVO();
  testVO.setTestchar("ya~~~~");
  testVO.setTestchar2("ya222~~~~");
  dao.insertBySession(testVO);
}


官方文件跟Google翻了很久,一直沒有研究出個滿意答案,
因此想跟各位前輩請教是否有哪邊設定錯誤了,如有冒犯在此先道歉,謝謝。

附註:
使用資料庫為MySQL,tbid為auto_increment。
附件為測試時所用到的程式碼。

test.rar (2.05k)


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
1263 Hibernate Custom SQL for create, 自訂SQL insert語法 violet90079 1868 2013-04-10 18:44
1180 Re:Hibernate Custom SQL for create, 自訂SQL insert語法 violet90079 910 2013-04-11 22:39
» JWorld@TW »  Object Relational Mapping » Hibernate

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8