簡體   English   中英

休眠映射異常

[英]Hibernate mapping exception

我在嘗試將Employee對象保存到數據庫時遇到以下錯誤:

org.hibernate.MappingException: Unknown entity: com.example.common.Employee
    at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:597)
    at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1339)

與休眠有關的 pom.xml中的依賴項 [我的是Spring-Hibernate項目] **

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate</artifactId>
    <version>3.2.7.ga</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.3.4.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>3.2.2.RELEASE</version>
</dependency>

我曾經在映射XML文件中定義Hibernate映射。 在這個例子中,我嘗試使用注釋。

Employee.java [僅代碼的開頭部分]

我也包括導入語句

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
@Table(name = "employees")
public class Employee implements Serializable {
    private static final long serialVersionUID = 5468763051360122059L;

    @Id
    @Column(name = "employee_guid", length = 36)
    @NotNull
    @Size(min = 36, max = 36)
    private String id;

    @Column(name = "is_active", nullable = false)
    private boolean isActive;

    @ManyToMany(mappedBy = "employees", fetch = FetchType.LAZY, cascade = {
            CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH
    })

我也嘗試將@Enitiy更改為@org.hibernate.annotations.Entity ,但是沒有用。

請給我一些提示,指出我做錯了什么。 如果您需要更多代碼,請告訴我。

編輯:

讓我知道如何在這里指定Employee Entity bean?

<bean id="MyHibernateSessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mappingResources">
            <!-- if there is a mapping file like Employee.hbm.xml i can refer here, but i manage thru annotations -->
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
                <prop key="hibernate.connection.autocommit">false</prop>
                <prop key="hibernate.connection.isolation">2</prop>
                <prop key="hibernate.transaction.auto_close_session">true</prop>
                <prop key="hibernate.current_session_context_class">managed</prop>
                <prop key="hibernate.transaction.flush_before_completion">true</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
            </props>
        </property>
    </bean>

我正在嘗試這個

<property name="annotatedClasses">
            <list>
                <value>com.example.Employee</value>
            </list>
        </property>

也已更改: class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

更新:

除非共享更多代碼,否則這個問題是不完整的。 因此,現在關閉此問題,並以以下建議作為答案,盡管這並不是我一直在尋找的確切答案。 如果有機會,我將重新開放。 謝謝大家

除了注釋,您還需要讓Hibernate知道您的實體類。 我認為有兩種方法可以做到這一點:

1)將類添加到您的hibernate.cfg.xml文件中:

<hibernate-configuration>
  <session-factory>
    <mapping class="com.example.common.Employee" />
  </session-factory>
</hibernate-configuration>

2)在代碼中配置Hibernate:

import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

private static SessionFactory buildSessionFactory() {
  Configuration configuration = new Configuration();
  configuration.configure();
  configuration.addAnnotatedClass(Employee.class);
  ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
  return configuration.buildSessionFactory(serviceRegistry);
}

休眠實體必須定義一個無參數的構造函數。

資料來源: http : //coding.tocea.com/java/java-frameworks/hibernate/hibernate-entity-does-not-define-no-argument-constructor/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM