keyword:MySql字段,Hibernate session
一.MySql字段敏感
這幾天怪問題真是不少,這不剛建的一個(gè)數(shù)據(jù)庫的表用MiddleGen批量生成hbm.xml文件居然和數(shù)據(jù)庫的數(shù)據(jù)類型不一致.
MySql建表語句如下:
drop table if exists book;
/*==============================================================*/
/* Table: book */
/*==============================================================*/
create table book
(
id int not null,
name varchar(100),
author varchar(100),
date date,
price int,
primary key (id)
)
comment="Book table"
type = InnoDB;
生成的hbm.xml文件如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<class
name="net.foxlog.prj.Book"
table="book"
>
<meta attribute="class-description" inherit="false">
@hibernate.class
table="book"
</meta>
<id
name="id"
type="java.lang.Long"
column="id"
>
<meta attribute="field-description">
@hibernate.id
generator-class="assigned"
type="java.lang.Long"
column="id"
</meta>
<generator class="assigned" />
</id>
<property
name="name"
type="java.lang.String"
column="name"
length="100"
>
<meta attribute="field-description">
@hibernate.property
column="name"
length="100"
</meta>
</property>
<property
name="author"
type="java.lang.String"
column="author"
length="100"
>
<meta attribute="field-description">
@hibernate.property
column="author"
length="100"
</meta>
</property>
<property
name="date"
type="java.sql.Date"
column="date"
length="10"
>
<meta attribute="field-description">
@hibernate.property
column="date"
length="10"
</meta>
</property>
<property
name="price"
type="java.lang.String"
column="price"
length="10"
>
<meta attribute="field-description">
@hibernate.property
column="price"
length="10"
</meta>
</property>
<!-- Associations -->
</class>
</hibernate-mapping>
注意到?jīng)]有,id的類型變成了Long型了,而price居然變成了String了,暈啊.
各位碰到過這個(gè)問題么?
最后還是找到問題所在了,實(shí)際上是建表有問題,問題就出在字段的名稱上,把id改為ID,price改為PRICE就沒問題了! MySql對id和price敏感? 不得而知,目前看來好像是這樣.只是提醒我以后建表養(yǎng)成一個(gè)習(xí)慣,都用大寫的就沒問題了.
沒想到一次測試中隨便建的一個(gè)表發(fā)現(xiàn)了這么個(gè)有趣的事情 :)
二.Hibernate的session關(guān)閉問題
用hibernate的工具類獲得session有沒有碰到過session is closed的錯(cuò)誤提示? 我又幸運(yùn)的碰到這個(gè)問題了,呵呵,我怎么有那么多問題啊,暈了,我看來是問題先生了,我的一個(gè)同事上次也跟我說過這個(gè)事情,后來他沒有正面解決這個(gè),繞過去了,他用Spring去替自己解決了,呵呵,也夠狠的.不過問題實(shí)際上是獲得session的時(shí)候需要增加一個(gè)判斷. 即 session.isOpen() == false;
DBUtil.java代碼如下:
/**
* 返回一個(gè)可用的數(shù)據(jù)庫Session連接
* @return Hibernate中對數(shù)據(jù)庫的Session連接
* @throws HibernateException
*/
public static Session currentSession() throws HibernateException
{
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (null==s || s.isOpen()==false)//注意這里
{
s = sessionFactory.openSession();
session.set(s);
}
return s;
}