[SPRING] org.hibernate.MappingException : 알 수없는 엔티티 :
SPRINGorg.hibernate.MappingException : 알 수없는 엔티티 :
내 코드로 무슨 일이 벌어지고 있는지 정말 알고 싶다.
나는 봄과 최대 절전 모드를 JPA로 사용하는 독립 실행 형 응용 프로그램을 가지고 있으며 단일 기본 클래스를 사용하여 테스트를 실행하려고합니다.
나의 주요 수업
package edu.acct.tsegay.common;
import edu.acct.tsegay.model.User;
import edu.acct.tsegay.business.IUserBusinessObject;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
try {
ApplicationContext context = new ClassPathXmlApplicationContext(
"Spring3AndHibernate-servlet.xml");
IUserBusinessObject userBusinessObject = (IUserBusinessObject) context
.getBean("userBusiness");
User user = (User) context.getBean("user1");
user.setPassword("pass");
user.setUsername("tsegay");
System.out.println(user.getPassword());
userBusinessObject.delete(user);
User user2 = new User();
user2.setUsername("habest");
user2.setPassword("pass1");
System.out.println(user2.getPassword());
/*
* userBusinessObject.save(user2);
*
* User user3 = userBusinessObject.searchUserbyId("tsegay");
* System.out.println("Search Result: " + user3.getUsername());
*/
System.out.println("Success");
} catch (Exception e) {
e.printStackTrace();
}
}
}
내 응용 프로그램 컨텍스트 :
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- data source -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="test" />
<property name="password" value="password" />
</bean>
<!-- session factory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- exposed person business object -->
<bean id="userBusiness" class="edu.acct.tsegay.business.UserBusinessObject">
<property name="userDao" ref="userDao" />
</bean>
<bean id="user1" class="edu.acct.tsegay.model.User">
<property name="username" value="tse" />
<property name="password" value="pass" />
</bean>
<!-- Data Access Object -->
<bean id="userDao" class="edu.acct.tsegay.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
내 사용자 모델 :
package edu.acct.tsegay.model;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Version;
import org.hibernate.annotations.NaturalId;
@Entity
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String username;
private String password;
private Integer VERSION;
@Version
public Integer getVERSION() {
return VERSION;
}
public void setVERSION(Integer vERSION) {
VERSION = vERSION;
}
@NaturalId
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
내 DAO는 다음과 같습니다.
package edu.acct.tsegay.dao;
import edu.acct.tsegay.model.User;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class UserDao implements IUserDao {
private SessionFactory sessionFactory;
private HibernateTemplate hibernateTemplate;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
public void save(User user) {
// TODO Auto-generated method stub
// getHibernateTemplate().save(user);
this.hibernateTemplate.save(user);
}
public void delete(User user) {
// TODO Auto-generated method stub
this.hibernateTemplate.delete(user);
}
public User searchUserbyId(String username) {
// TODO Auto-generated method stub
return this.hibernateTemplate.get(User.class, username);
}
}
그리고이 내 stacktrace 오류 때 프로그램을 실행할 :
pass
org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: edu.acct.tsegay.model.User; nested exception is org.hibernate.MappingException: Unknown entity: edu.acct.tsegay.model.User
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:837)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:833)
at edu.acct.tsegay.dao.UserDao.delete(UserDao.java:34)
at edu.acct.tsegay.business.UserBusinessObject.delete(UserBusinessObject.java:30)
at edu.acct.tsegay.common.App.main(App.java:23)
Caused by: org.hibernate.MappingException: Unknown entity: edu.acct.tsegay.model.User
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:580)
at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1365)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:100)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:74)
at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:793)
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:771)
at org.springframework.orm.hibernate3.HibernateTemplate$25.doInHibernate(HibernateTemplate.java:843)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
... 6 more
해결법
-
==============================
1.세션 팩토리 구성에서 클래스를 나열해야합니다. EntityManager를 사용하고 있다면 엔티티를 자동 발견 할 수 있습니다.
세션 팩토리 구성에서 클래스를 나열해야합니다. EntityManager를 사용하고 있다면 엔티티를 자동 발견 할 수 있습니다.
최대 절전 모드와 봄 모드에서 어노테이션을 사용하려면 AnnotationSessionFactoryBean을 사용해야한다.
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="annotatedClasses"> <list> <value>edu.acct.tsegay.model.User</value> </list> </property> .... </bean>
또한 User 엔티티가 스프링 빈이라는 것이 다소 이상합니다. 당신은 그럴 필요가 없습니다. Hibernate 엔티티는 new 연산자로 생성된다.
-
==============================
2.나는 같은 문제를 겪었으며 이것에 대한 좋은 대답을 찾지 못했다.
나는 같은 문제를 겪었으며 이것에 대한 좋은 대답을 찾지 못했다.
나를 위해 일한 것은 persistence.xml 파일에 내 엔티티 클래스를 선언하는 것이 었습니다.
<persistence ...> <persistence-unit ...> <class>com.company.maenad.core.model.News</class> <class>com.company.maenad.core.model.AdExtraInfo</class> </persistence-unit> </persistence>
-
==============================
3.Bozho 응답 외에도 annotation으로 spring + hibernate를 사용한다면 세션 factory bean에서 아래와 같이 bean을 등록 할 수있다 :
Bozho 응답 외에도 annotation으로 spring + hibernate를 사용한다면 세션 factory bean에서 아래와 같이 bean을 등록 할 수있다 :
LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean(); localSessionFactoryBean.setDataSource(appContext.getBean(HikariDataSource.class)); localSessionFactoryBean.setAnnotatedClasses( AppUser.class, Assignment.class );
from https://stackoverflow.com/questions/4530572/org-hibernate-mappingexception-unknown-entity by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 어노테이션으로 ehcache 3 사용 (스프링 부트 사용 안함) (0) | 2019.04.04 |
---|---|
[SPRING] Spring은 다른 프로젝트에서 응용 프로그램 컨텍스트 가져 오기 (0) | 2019.04.04 |
[SPRING] 봄 mvc에서 LocalDate에 대한 전역 데이터 바인딩을 등록하는 방법? (0) | 2019.04.04 |
[SPRING] 스프링 빈에 int 배열을 주입하는 법 (0) | 2019.04.04 |
[SPRING] Java 9 용 Spring 5가 필요합니까? (0) | 2019.04.04 |