Java org.hibernate.MappingException:未知实体-尽管我的实体拥有它所需要的一切
我正在尝试向SpringWeb应用程序添加一些Hibernate功能。这是我第一次使用Hibernate会话工厂,以某种方式独立于Spring(我使用Hibernate模板,工作正常)。现在我得到了这些异常Java org.hibernate.MappingException:未知实体-尽管我的实体拥有它所需要的一切,java,hibernate,spring,Java,Hibernate,Spring,我正在尝试向SpringWeb应用程序添加一些Hibernate功能。这是我第一次使用Hibernate会话工厂,以某种方式独立于Spring(我使用Hibernate模板,工作正常)。现在我得到了这些异常org.hibernate.MappingException:Unknown entity,尽管我认为这些组件连接良好。但是说够了,让我们向您展示代码: 实体类: @Entity // javax.persistence.Entity; @Table(name = "Creazione
org.hibernate.MappingException:Unknown entity
,尽管我认为这些组件连接良好。但是说够了,让我们向您展示代码:
实体类:
@Entity // javax.persistence.Entity;
@Table(name = "CreazioneV49_Users")
public class User implements Serializable {
private long id;
private String name;
private String sessionId;
@Id
@GeneratedValue
@Column(name = "USER_ID")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Column(name = "USER_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "USER_SESSIONID")
public String getSessionId() {
return sessionId;
}
public void setSessionId(String sessionId) {
this.sessionId = sessionId;
}
}
存储库类:
@Repository
@Transactional
public class DBUtil implements DBUtilInterface {
@Autowired
@Qualifier("mySessionFactory")
private SessionFactory sessionFactory;
private Session currentSession() {
return sessionFactory.getCurrentSession();
}
public void addUser(User user){
currentSession().save(user);
}
}
SpringBean组件:
@Component
@Scope(value = "session")
public class CreateV49 implements Serializable {
@Autowired
private DBUtilInterface dbUtil;
public DBUtilInterface getDbUtil() {
return dbUtil;
}
public void setDbUtil(DBUtil dbUtil) {
this.dbUtil = dbUtil;
}
public void persistData(){
User user = new User();
user.setName("Gigel");
user.setSessionId("1545645645646");
dbUtil.addUser(user);
System.out.println("GOOOD");
}
applicationContext.xml的一部分
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@//172.28.233.107:1521/SLRFORM"/>
<property name="username" value="selir"/>
<property name="password" value="selir1"/>
<property name="maxActive" value="10" />
<property name="initialSize" value="5" />
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="annotatedPackages">
<list>
<value>creazione.persistence</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="mySessionFactory" />
</property>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
<aop:aspectj-autoproxy/>
我现在将尝试使用
而不是软件包。。。虽然工作起来会很奇怪
看来带注释的类是有效的。。。用户bean已被识别,但我遇到了一个奇怪的错误,尽管我的ID是自动生成的:
Hibernate: insert into CreazioneV49_Users (USER_ID, USER_NAME, USER_SESSIONID) values (null, ?, ?)
Nov 16, 2011 10:44:21 AM org.hibernate.util.JDBCExceptionReporter logExceptions
WARNING: SQL Error: 1400, SQLState: 23000
Nov 16, 2011 10:44:21 AM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: ORA-01400: cannot insert NULL into ("SELIR"."CREAZIONEV49_USERS"."USER_ID")
我正在使用Oracle,因此我在User bean中将序列生成器添加到我的ID中,但没有成功:
@Id
@SequenceGenerator(name = "my-creazioneV49Seq", sequenceName = "creazioneV49Seq")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "my-creazioneV49Seq")
@Column(name = "USER_ID")
public long getId() {
return id;
}
已解决:升级到HIBERNATE 3.6.8,并将方言更改为ORACLE 您需要一个
persistence.xml
来列出应该映射的类,或者需要一个orm.xml
和一个package标记来命名实体类所在的包。我想您需要尝试一下
<property name="annotatedClasses">
<list>
<value>creazione.persistence.User</value>
</list>
</property>
creazione.persistence.User
你的persistence.xml中有什么?@CodeBrickie我没有。正如你所看到的,我只使用注释。“拥有它所需要的一切”是一个太强的语句。。。再检查一遍!你试过使用test.package.Foo test.package.Bar吗?你能粘贴完整的stacktrace吗?实际上他应该使用javax.persistence.Entity
,这就是为什么我使用注释和Spring类AnnotationSessionFactoryBean
…来忘记xml(hibernate xml)在这种情况下,没有任何XML是不行的。我已经见过很多人被它咬了。annotatedPackages仅用于package-info.java。packagesToScan可以用来代替逐个添加类。
<property name="annotatedClasses">
<list>
<value>creazione.persistence.User</value>
</list>
</property>