hibernate注意事项

来源:互联网 发布:朴素贝叶斯算法实现 编辑:程序博客网 时间:2024/04/30 00:10

1.  org.hibernate.hql.ast.QuerySyntaxException: unexpected token: member near line 1, column 6 [from member wherememberName=?]

这是hsl语句写错。

//form后为类名,而不是数据库名,hibernate设计目的就是让java代码与数据库分离。

           Query query=session.createQuery("from Member where memberName=?");

 


2.  org.hibernate.MappingException: Unknownentity:

如果发现这样的异常,很可能是没有把对象的mapping文件加入到hibernate.cfg.xml文件中。

INFO : org.hibernate.tool.hbm2ddl.SchemaUpdate - schema updatecomplete

org.hibernate.MappingException: Unknownentity: com.gathershell.domain.Manager

    atorg.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:628)

    atorg.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1366)

    atorg.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)

    atorg.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)

    atorg.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)

    atorg.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)

    atorg.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)

    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)

    atorg.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)

    atorg.hibernate.impl.SessionImpl.save(SessionImpl.java:551)

    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)

 

3.  could not initialize proxy - no Session

这是懒加载所致,要禁用它:<many-to-onename="bigType"lazy="false"></many-to-one>

写在类上是不行的<classname="SmallType"table="smallType"lazy="false">这样不行。

报的异常是:

ERROR: org.hibernate.LazyInitializationException - could not initialize proxy - no Session

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

    atorg.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:132)

    atorg.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:174)

    atorg.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)


后来我发现这在有时候并不是自己所想要模式,我在写完domain对象后,用eclipse自动生成toString()方法,这里面也包含了对象属性,即orderForm。

private int id;

    private OrderForm orderForm;

    private int goodsId;

    private float price;

    private int number;//订货数量

    private Date createTime;//订货时间

    @Override

    public String toString() {

       return"OrderDetail id=" +id +", orderForm=" +orderForm +", goodsId="

              + goodsId +", price=" +price +", number=" +number

              + ", createTime=" +createTime;

    }

然后在测试时,用System.out.println(orderDetail);出现了上面这种错误。所以把toString()中的对象属性去掉就可以了。

4. Initial SessionFactory creation failed.org.hibernate.HibernateException: Unable to instantiate default tuplizer[org.hibernate.tuple.entity.PojoEntityTuplizer]

这个异常一般是你的mapping文件写错了,检查属性类型,名称是否有错。

我遇到这个是domain类是写private Date createDate;而在配置文件中写的是<property name="createTime" type="java.util.Date"></property>,然后把java文件中的属性名改为createTime就可以了。


5.  MySql数据库中不能用leave作字段名

Leave在MySql数据库中是一个保留关键字,如有类的属性名为leave,在配置文件中要明确指定另一个对应的字段名<propertyname="leave" column="leaveTime"></property>


 

 

 

 

-----------------------持续更新中--------------------------

原创粉丝点击