是。
hibernate可以使用工具根据你的数据库生成映射。或则你手动生成。
hibernate可以使用工具根据你的数据库生成映射。或则你手动生成。
解决方案 »
- ssh里的jsp页面的连接怎么传参数到action里
- java.lang.NoSuchMethodError: org.apache.commons.pool.impl.GenericObjectPool: met
- 求sql学习路线及教材
- 急! 在线等,hibernate问题,50分送上! 不拿白不拿啊
- 初学者的疑惑!用jsp实现成功登陆后延迟登陆并弹出一个小窗口
- 紧急求助!有关利用<s:iterator>读取HashMap
- JAVA完全攻略网址索引
- 用Dom4j生成xml文档遇到的特殊字符问题
- 赛扬1G+512内存,运行jbuliderX+weblogic,速度会不会很慢?
- java socket 发送16进制数据-串口通信
- ConvertAndSend的疑问
- NoSuchBeanDefinitionException怎么解决?
使用两张表,一张Student,一张CardStudent表
id varchar 5 (PK)
name varchar 20
card_id varchar 8
sex char 2
age int 3Card表
id varchar 8(PK)
name varchar 20
Student.hbm.xml<hibernate-mapping>
<class name="dataAssign.Student" table="Student" catalog="study">
<id name="id" type="java.lang.String">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="20" not-null="true" />
</property>
<property name="sex" type="java.lang.String">
<column name="sex" length="2" not-null="true" />
</property>
<property name="age" type="java.lang.Integer">
<column name="age" not-null="true" />
</property>
<many-to-one name="card" class="dataAssign.Card" column="card_id" unique="true" lazy="false"/>
</class>
</hibernate-mapping>
Card.hbm.xml<hibernate-mapping>
<class name="dataAssign.Card" table="Card" catalog="study">
<id name="id" type="java.lang.String">
<column name="id" />
<generator class="native"/>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="20" not-null="true" />
</property>
<one-to-one name="stu" class="DataAssign.Student" cascade="all"/>
</class>
</hibernate-mapping>
SCDemo.java(测试文件)package dataAssign;
import dataAssign.*;
import org.hibernate.*;
public class SCDemo {
public static void main(String args[]){
Student stu=new Student();
stu.setId("23");
stu.setName("Bill");
stu.setCardId("20051215");
stu.setSex("男");
stu.setAge(22);
System.out.println("sex is:"+stu.getSex());
Card card=new Card();
card.setName("Bill");
stu.setCard(card);
card.setStu(stu);
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
StudentDAO studao=new StudentDAO();
try{
studao.save(stu);
tx.commit();
session.close();
System.out.println("name is:"+stu.getName());
}
catch(HibernateException e){
e.printStackTrace();
tx.rollback();
}
}
}运行后报错%%%% Error Creating SessionFactory %%%%
org.hibernate.MappingException: persistent class not known: DataAssign.Student
at org.hibernate.cfg.Configuration$1.getIdentifierType(Configuration.java:1917)
at org.hibernate.type.EntityType.getIdentifierType(EntityType.java:226)
at org.hibernate.type.EntityType.getIdentifierOrUniqueKeyType(EntityType.java:236)
at org.hibernate.persister.entity.AbstractPropertyMapping.initIdentifierPropertyPaths(AbstractPropertyMapping.java:171)
at org.hibernate.persister.entity.AbstractPropertyMapping.initPropertyPaths(AbstractPropertyMapping.java:160)
at org.hibernate.persister.entity.AbstractEntityPersister.initOrdinaryPropertyPaths(AbstractEntityPersister.java:1585)
at org.hibernate.persister.entity.AbstractEntityPersister.initPropertyPaths(AbstractEntityPersister.java:1613)
at org.hibernate.persister.entity.AbstractEntityPersister.postConstruct(AbstractEntityPersister.java:2610)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:386)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:216)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1176)
at dataAssign.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:60)
at dataAssign.HibernateSessionFactory.getSession(HibernateSessionFactory.java:43)
at dataAssign.SCDemo.main(SCDemo.java:18)
Exception in thread "main" java.lang.NullPointerException
at dataAssign.SCDemo.main(SCDemo.java:19)
大小写问题而已
这个是我调试时弄错的
现在改回来了
但是,还是出错org.hibernate.TransientObjectException: dataAssign.Card
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:216)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:108)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:221)
at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:476)
at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:2803)
at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:467)
at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:190)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:195)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at dataAssign.SCDemo.main(SCDemo.java:24)
是否是我的配置有问题??
麻烦了~~~~
是什么意思呢??
推荐否。
你现在的问题就是进行dataAssign.Card时事务出错。因为关联外键为保存。也就是所在存的时候你的关联实体并没有先存如数据库。所以造成数据库中的主外键约束不匹配。ls加cascade的意思是将级联关系在ORM中体现。这样hibernate会先根据级联关系保存外键实体。
org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved
另,数据库中最好不要设置主外键约束,若后期进行系统结构修改,你会很痛苦。因为这样造成关系实体间的强耦。