天天看點

hibernate 删除方式

代碼如下:

@Test

public void TestRovemove(){

Session session=HibernateUtil.getSession();

 //加載

Engine engine=(Engine) session.get(Engine.class, new Integer(110016));

System.out.println("fist time load:"+engine.getEnginename());

  //删除

 org.hibernate.Transaction tran=session.beginTransaction();

 session.delete(engine);

 tran.commit();

   //再次加載

Engine engine2=(Engine) session.get(Engine.class, new Integer(110016));

System.out.println("fist time load:"+engine2.getEnginename());

}

輸出如下:

2015-9-11 16:16:43 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>

INFO: HHH000397: Using ASTQueryTranslatorFactory

Hibernate: select engine0_.engineid as engineid1_1_0_, engine0_.carid as carid3_1_0_, engine0_.enginename as enginena2_1_0_ from engine engine0_ where engine0_.engineid=?

fist time load:test_bmw90

Hibernate: delete from engine where engineid=?

Hibernate: select engine0_.engineid as engineid1_1_0_, engine0_.carid as carid3_1_0_, engine0_.enginename as enginena2_1_0_ from engine engine0_ where engine0_.engineid=?

---------報錯如下:

java.lang.NullPointerException

at dxm.com.test.hibernateTest.TestRovemove(hibernateTest.java:146)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)

at org.junit.runners.ParentRunner.run(ParentRunner.java:300)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

換一種删除方式 ,測試一下

代碼如下

@Test

public void TestRovemove(){

Session session=HibernateUtil.getSession();

Engine engine=(Engine) session.get(Engine.class, new Integer(110017));

System.out.println("fist time load:"+engine.getEnginename());

//改為 bulk  delete/update 删除使用者

org.hibernate.Transaction tran=session.beginTransaction();

String sql="delete from Engine where engineid=110017";

session.createQuery(sql).executeUpdate();

tran.commit();

Engine engine2=(Engine) session.get(Engine.class, new Integer(110017));

System.out.println("fist time load:"+engine2.getEnginename());

}

輸出如下:

INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)

2015-9-11 17:04:28 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>

INFO: HHH000397: Using ASTQueryTranslatorFactory

Hibernate: select engine0_.engineid as engineid1_1_0_, engine0_.carid as carid3_1_0_, engine0_.enginename as enginena2_1_0_ from engine engine0_ where engine0_.engineid=?

fist time load:test_bmw91

Hibernate: delete from engine where engineid=110017

fist time load:test_bmw91 

由此可見: bulk  delete/update 删除使用者,提供了面向高性能批量操作的一種實作途徑。但無法保證緩存資料的一緻性。

bug如下:

org.hibernate.hql.internal.ast.QuerySyntaxException: engine is not mapped [delete from engine where engineid=110017]

at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96)

at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)

at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234)

at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)

at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:131)

at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:93)

at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)

at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)

at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)

at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836)

at dxm.com.test.hibernateTest.TestRovemove(hibernateTest.java:148)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)

at org.junit.runners.ParentRunner.run(ParentRunner.java:300)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: engine is not mapped

at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189)

at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109)

at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95)

at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:338)

at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3678)

at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3567)

at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:708)

at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.deleteStatement(HqlSqlBaseWalker.java:437)

at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:265)

at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)

at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)

... 31 more

------------engine 改為大寫的Engine