【错误日志如下】
14:13:49,067 WARN ClassPathXmlApplicationContext:545 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.boot.MappingException: Association [com.sve.entity.Admin.commodity] references an unmapped entity [com.sve.entity.Admin.commodity] : origin(null)
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.boot.MappingException: Association [com.sve.entity.Admin.commodity] references an unmapped entity [com.sve.entity.Admin.commodity] : origin(null)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:753)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:838)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83)
at com.sve.dao.test.main(test.java:15)
Caused by: org.hibernate.boot.MappingException: Association [com.sve.entity.Admin.commodity] references an unmapped entity [com.sve.entity.Admin.commodity] : origin(null)
at org.hibernate.boot.model.source.internal.hbm.ModelBinder$AbstractPluralAttributeSecondPass.bindCollectionTable(ModelBinder.java:3186)
at org.hibernate.boot.model.source.internal.hbm.ModelBinder$AbstractPluralAttributeSecondPass.doSecondPass(ModelBinder.java:3124)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1659)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1634)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
at org.springframework.orm.hibernate5.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:416)
at org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:401)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 12 more
【Admin类】
package com.sve.entity;
import java.util.HashSet;
import java.util.Set;
public class Admin {
//管理员的编号和职称
private int A_Id;
private String A_Name;
public int getA_Id() {
return A_Id;
}
public void setA_Id(int a_Id) {
A_Id = a_Id;
}
public String getA_Name() {
return A_Name;
}
public void setA_Name(String a_Name) {
A_Name = a_Name;
}
//订单和商品管理员的集合
private Set<Order> order = new HashSet<Order>();
private Set<Commodity> commodity = new HashSet<Commodity>();
public Set<Order> getOrder() {
return order;
}
public void setOrder(Set<Order> order) {
this.order = order;
}
public Set<Commodity> getCommodity() {
return commodity;
}
public void setCommodity(Set<Commodity> commodity) {
this.commodity = commodity;
}
}
【Order类】
package com.sve.entity;
public class Commodity {
//商品管理员的编号、姓名、状态(启用/禁用)
private int C_Id;
private String C_Name;
private String C_State;
public int getC_Id() {
return C_Id;
}
public void setC_Id(int c_Id) {
C_Id = c_Id;
}
public String getC_Name() {
return C_Name;
}
public void setC_Name(String c_Name) {
C_Name = c_Name;
}
public String getC_State() {
return C_State;
}
public void setC_State(String c_State) {
C_State = c_State;
}
}
【Commodity类】
package com.sve.entity;
public class Order {
//订单管理员的编号、姓名、状态(启用/禁用)
private int O_Id;
private String O_Name;
private String O_State;
public int getO_Id() {
return O_Id;
}
public void setO_Id(int o_Id) {
O_Id = o_Id;
}
public String getO_Name() {
return O_Name;
}
public void setO_Name(String o_Name) {
O_Name = o_Name;
}
public String getO_State() {
return O_State;
}
public void setO_State(String o_State) {
O_State = o_State;
}
}
【Admin映射文件】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<set name="order" table="Admin_Order_Table">
<key column="A_Name"></key>
<one-to-many class="com.sve.entity.Order" />
</set>
<set name="commodity" table="Admin_Comm_Table">
<key column="A_Name"></key>
<one-to-many class="com.sve.entity.commodity" />
</set>
</class>
【Order映射文件】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
【Commodity映射文件】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
【applicationContext.xml配置文件】
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/j09" />
<property name="username" value="root" />
<property name="password" value="123456" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mappingResources">
<list>
<value>com/sve/entity/Comm-mapp.xml</value>
<value>com/sve/entity/Order-mapp.xml</value>
<value>com/sve/entity/Admin-mapp.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props >
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="AdminDao" class="com.sve.dao.AdminDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
【dao类】
package com.sve.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import com.sve.entity.Admin;
import com.sve.entity.Order;
public class AdminDao extends HibernateDaoSupport {
Session s =null;
public List getOrder(){
s = super.getSessionFactory().openSession();
List order = s.createQuery("from Order").list();
return order;
}
public void addAdmin(){
s = super.getSessionFactory().openSession();
Transaction ts = s.beginTransaction();
Admin a = new Admin();
a.setA_Name("订单管理员");
Order o = new Order();
o.setO_Name("王尼玛");
o.setO_State("启用");
a.getOrder().add(o);
s.save(a);
s.save(o);
ts.commit();
s.close();
}
}
【测试类】
package com.sve.dao;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.sve.entity.Order;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
AdminDao dao = (AdminDao)context.getBean("AdminDao");
dao.addAdmin();
List<Order> list = dao.getOrder();
for(Order o : list){
System.out.println(o.getO_Name()+o.getO_State());
}
}
}