JBoss 7.1和Hibernte 4.3.5导致异常

时间:2016-08-11 10:26:18

标签: jboss7.x hibernate-4.x

我使用Hibernate 4.3.5和JBoss 7.1.1创建了一个项目。 我给你一个关于我项目构成的截图:

enter image description here

<myTags:hello>上的罐子是:

enter image description here

贝娄,是被收养的班级:

WEB-INF/lib

EntityDao.java

public class EntityDao implements EntityDaoInterface<Book, Integer>
{
	private Session currentSession;
	private Transaction currentTransaction;

	public EntityDao() {
	}

	public Session openCurrentSession() {
		currentSession = getSessionFactory().openSession();
		return currentSession;
	}

	public Session openCurrentSessionwithTransaction() {
		currentSession = getSessionFactory().openSession();
		currentTransaction = currentSession.beginTransaction();
		return currentSession;
	}
	
	public void closeCurrentSession() {
		currentSession.close();
	}
	
	public void closeCurrentSessionwithTransaction() {
		currentTransaction.commit();
		currentSession.close();
	}
	
	private static SessionFactory getSessionFactory() {
		Configuration configuration = new Configuration().configure();
		StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
				.applySettings(configuration.getProperties());
		SessionFactory sessionFactory = configuration.buildSessionFactory(builder.build());
		return sessionFactory;
	}

	public Session getCurrentSession() {
		return currentSession;
	}

	public void setCurrentSession(Session currentSession) {
		this.currentSession = currentSession;
	}

	public Transaction getCurrentTransaction() {
		return currentTransaction;
	}

	public void setCurrentTransaction(Transaction currentTransaction) {
		this.currentTransaction = currentTransaction;
	}

	public void persist(Person entity) {
		getCurrentSession().save(entity);
	}

	public void update(Person entity) {
		getCurrentSession().update(entity);
	}

	public void delete(Person entity) {
		getCurrentSession().delete(entity);
	}

	@SuppressWarnings("unchecked")
	public List<Person> findAllPersons() {
		List<Person> persons = (List<Person>) getCurrentSession().createQuery("from Person").list();
		return persons;
	}

	public Person findPersonById(Integer id) {
		Person person = (Person) getCurrentSession().get(Person.class, id);
		return person; 
	}
	
}

EntityDaoInterface.java

public interface EntityDaoInterface<T, Id extends Serializable> 
{
	public void persist(T entity);
	public void update(T entity);
	public T findById(Id id);
	public void delete(T entity);
	public List<T> findAll();
	public void deleteAll();
}

EntityService.java

public class EntityService 
{
	private static EntityDao entityDao;

	public EntityService() {
		entityDao = new EntityDao();
	}

	public void persist(Person entity) {
		entityDao.openCurrentSessionwithTransaction();
		entityDao.persist(entity);
		entityDao.closeCurrentSessionwithTransaction();
	}
	
	public void update(Person entity) {
		entityDao.openCurrentSessionwithTransaction();
		entityDao.update(entity);
		entityDao.closeCurrentSessionwithTransaction();
	}

	public void remove(Person entity) {
		entityDao.openCurrentSessionwithTransaction();
		entityDao.delete(entity);
		entityDao.closeCurrentSessionwithTransaction();
	}

	public Person findPersonById(int id) {
		entityDao.openCurrentSession();
		Person person = entityDao.findPersonById(id);
		entityDao.closeCurrentSession();
		return person;
	}

	public List<Person> findAllPersons() {
		entityDao.openCurrentSession();
		List<Person> persons = entityDao.findAllPersons();
		entityDao.closeCurrentSession();
		return persons;
	}

	
	public void deleteAll() {
		entityDao.openCurrentSessionwithTransaction();
		entityDao.deleteAll();
		entityDao.closeCurrentSessionwithTransaction();
	}

	public EntityDao entityDao() {
		return entityDao;
	}
}

Person.java

@Entity
@Table(name = "person")
public class Person
{
	@Id      
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	private int id;
	
	@Column(name = "age")
	private int age;
	
	@Column(name= "name")
	String name;
	
	public Person() {}

	public Person(int id, int age, String name) {
		super();
		this.id = id;
		this.age = age;
		this.name = name;
	}

	// With the methods: set, get, toString, hashCode, equals
	
}

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   <session-factory>
	   <property name="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
	   <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
	   <property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433;database=ccc</property>
	   <property name="hibernate.connection.username">lm</property>
	   <property name="hibernate.connection.password">pp</property>
	   <property name="hibernate.hbm2ddl.auto">update</property>
	   <property name="show_sql">true</property>
	   <property name="hibernate.current_session_context_class">thread</property>
	   <mapping class="com.esprit.entity.Book"/>
	   <mapping class="com.esprit.entity.Person"/>
	</session-factory>
</hibernate-configuration>

DataModelBeanD.java

运行项目后,出现以下错误:

@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class DataModelBeanD implements Serializable 
{
    private List<Person> list;
    private Person person = new Person();
    private boolean edit;
    private EntityService entityService;

    @PostConstruct
    public void init()
    {
    	entityService = new EntityService();
    	list = entityService.findAllPersons();
    }
}

我不知道错过了什么,请你帮我解决这个问题。任何建议都表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

我通过制作Hibernate 4.2.21而不是Hibernate 4.3.5解决了我的问题。然后我重新创建类try-catch的方法getSessionFactory(),如下所示:

EntityDao.java