在学习Hibernate
有个car的数据库,只有一个表basiccar
四个字段:
id,name,factory,date
我编写了POJO文件,也映射了,也写了Hibernate配置文件
POJO:package basicCar.bean;import java.util.Date;public class BasicCar implements java.io.Serializable{
private long id;
private String name;
private String factory;
private Date date;
public BasicCar(){
}
public BasicCar(String name,String factory,Date date){
this.name = name;
this.factory = factory;
this.date = date;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFactory() {
return factory;
}
public void setFactory(String factory) {
this.factory = factory;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}映射文件:<hibernate-mapping><class name="basicCar.bean.BasicCar" table="basiccar"> <id
name="id"
type="long"
column="id"
>
<generator class="increment" />
</id> <property name="name" type="java.lang.String" column="name" />
<property name="factory" type="java.lang.String" column="factory" />
<property name="date" type="date" column="date" />
</class>
</hibernate-mapping>Hibernate;<hibernate-configuration> <session-factory>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">1119</property>
<property name="connection.url">jdbc:mysql://localhost:3306/car</property>
<property name="show_sql">true</property>
<mapping resource="basicCar/bean/BasicCar.hbm.xml" /> </session-factory>
</hibernate-configuration>
util:package com.chuanjie56.util;import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;public class HibernateSessionFactory { private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; @SuppressWarnings("unchecked")
private static final ThreadLocal threadLocal = new ThreadLocal(); private static final Configuration cfg = new Configuration(); private static org.hibernate.SessionFactory sessionFactory; @SuppressWarnings("unchecked")
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
}
catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = sessionFactory.openSession();
threadLocal.set(session);
} return session;
}
@SuppressWarnings("unchecked")
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null); if (session != null) {
session.close();
}
} private HibernateSessionFactory() {
}
}
测试文件;
public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test = new Test();
//test.saveEntity();
test.updateEntiry();
//test.deleteEntity();
}
void saveEntity(){
Session session=null;
Transaction tx = null;
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();
BasicCar bc = new BasicCar();
bc.setFactory("Beijing123");
bc.setName("BJcar123");
bc.setDate(Date.valueOf("1966-02-03"));
session.save(bc);
tx.commit();
}
void deleteEntity(){
Session session=null;
Transaction tx = null;
try{
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();
BasicCar bc = (BasicCar)session.load(BasicCar.class, new Long(1));
session.delete(bc);
tx.commit();
}catch(HibernateException e){
throw e;
}finally{
if(tx!=null)
tx.rollback();
HibernateSessionFactory.closeSession();
}
}
void updateEntiry(){
Session session=null;
Transaction tx = null;
try{
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();
BasicCar bc = (BasicCar)session.load(BasicCar.class, new Long(2));
bc.setName("shCar");
bc.setFactory("SH00");
session.update(bc);
tx.commit();
}catch(HibernateException e){
throw e;
}finally{
if(tx!=null)
tx.rollback();
HibernateSessionFactory.closeSession();
}
}
void queryEntity(){
Session session=null;
try{
session = HibernateSessionFactory.currentSession();
Query query = session.createQuery("from BasicCar");
BasicCar bc = (BasicCar)query.list().get(0);
System.out.println("query:"+bc.getName());
}catch(Exception e){
}
}
}
增加,查询操作没问题,
但是删除和更新操作报异常:
Exception in thread "main" org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:183)
at basicCar.Test.updateEntiry(Test.java:76)
at basicCar.Test.main(Test.java:27)
不知道为什么
有个car的数据库,只有一个表basiccar
四个字段:
id,name,factory,date
我编写了POJO文件,也映射了,也写了Hibernate配置文件
POJO:package basicCar.bean;import java.util.Date;public class BasicCar implements java.io.Serializable{
private long id;
private String name;
private String factory;
private Date date;
public BasicCar(){
}
public BasicCar(String name,String factory,Date date){
this.name = name;
this.factory = factory;
this.date = date;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFactory() {
return factory;
}
public void setFactory(String factory) {
this.factory = factory;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}映射文件:<hibernate-mapping><class name="basicCar.bean.BasicCar" table="basiccar"> <id
name="id"
type="long"
column="id"
>
<generator class="increment" />
</id> <property name="name" type="java.lang.String" column="name" />
<property name="factory" type="java.lang.String" column="factory" />
<property name="date" type="date" column="date" />
</class>
</hibernate-mapping>Hibernate;<hibernate-configuration> <session-factory>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">1119</property>
<property name="connection.url">jdbc:mysql://localhost:3306/car</property>
<property name="show_sql">true</property>
<mapping resource="basicCar/bean/BasicCar.hbm.xml" /> </session-factory>
</hibernate-configuration>
util:package com.chuanjie56.util;import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;public class HibernateSessionFactory { private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; @SuppressWarnings("unchecked")
private static final ThreadLocal threadLocal = new ThreadLocal(); private static final Configuration cfg = new Configuration(); private static org.hibernate.SessionFactory sessionFactory; @SuppressWarnings("unchecked")
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
}
catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = sessionFactory.openSession();
threadLocal.set(session);
} return session;
}
@SuppressWarnings("unchecked")
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null); if (session != null) {
session.close();
}
} private HibernateSessionFactory() {
}
}
测试文件;
public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test = new Test();
//test.saveEntity();
test.updateEntiry();
//test.deleteEntity();
}
void saveEntity(){
Session session=null;
Transaction tx = null;
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();
BasicCar bc = new BasicCar();
bc.setFactory("Beijing123");
bc.setName("BJcar123");
bc.setDate(Date.valueOf("1966-02-03"));
session.save(bc);
tx.commit();
}
void deleteEntity(){
Session session=null;
Transaction tx = null;
try{
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();
BasicCar bc = (BasicCar)session.load(BasicCar.class, new Long(1));
session.delete(bc);
tx.commit();
}catch(HibernateException e){
throw e;
}finally{
if(tx!=null)
tx.rollback();
HibernateSessionFactory.closeSession();
}
}
void updateEntiry(){
Session session=null;
Transaction tx = null;
try{
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();
BasicCar bc = (BasicCar)session.load(BasicCar.class, new Long(2));
bc.setName("shCar");
bc.setFactory("SH00");
session.update(bc);
tx.commit();
}catch(HibernateException e){
throw e;
}finally{
if(tx!=null)
tx.rollback();
HibernateSessionFactory.closeSession();
}
}
void queryEntity(){
Session session=null;
try{
session = HibernateSessionFactory.currentSession();
Query query = session.createQuery("from BasicCar");
BasicCar bc = (BasicCar)query.list().get(0);
System.out.println("query:"+bc.getName());
}catch(Exception e){
}
}
}
增加,查询操作没问题,
但是删除和更新操作报异常:
Exception in thread "main" org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:183)
at basicCar.Test.updateEntiry(Test.java:76)
at basicCar.Test.main(Test.java:27)
不知道为什么
解决方案 »
- 关于站内搜索如何实现的问题
- Eclipse字体大小没法改变。。
- 网页设计的问题
- Applet如何可以调用客户端的dll库文件?别的方法也行
- 如何解决OutOfMemoryError的问题
- 请教各位:连接MYSQL时在TOMCAT行,在WEBLOGI却不行!
- 请各位给解释一下:web服务器加一个jsp引擎就是一个Application Server了吗?如果不是,相比Application Server它还缺点什么?
- jsp中的js如何提交table给另一个jsp页面
- java 执行linux mount命令失败,手动可以,求解!!!
- @autowired 注入失败,试了各种方法,要崩溃了
- An internal error occurred during:"Launching .. on tomcat 6.x
- 再次问及<base href="<%=basePath%>">路径改变的问题
tx.rollback();
放在catch块里,别放在finlly块里,这样每次必然执行,不出错才怪了
if(tx!=null)
tx.rollback()
放在finally里面,tx执行了rollback()数据库里面还是跟新了呢,不应该回滚么
《java高手真经java web和性框架》2009年3月版里错的,