【问题标题】:Inheritance annotation - Exception in thread "main" org.hibernate.MappingException: Repeated column in mapping for entity继承注释 - 线程“主”org.hibernate.MappingException 中的异常:实体映射中的重复列
【发布时间】:2018-01-29 04:30:00
【问题描述】:

我有两个类如下。 “角色”字段是“重复的”。

@Entity(name="INHERITANCE_S1_EMPLOYEE_ANN")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="DISCRIMINATOR", discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(value="EMPLOYEE")
public class Employee {
    @Id
    @Column(name="EMPLOYEE_ID")
    private int id = 0;
    private String name = null;
    private String role = null;

    public Employee(String name){
        setName(name);
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }
}

@Entity
@DiscriminatorValue(value="EXECUTIVE")
public class Executive extends Employee{
    private String role = null;

    public Executive(String name){
        super(name);
    }
    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }
}

我的 XML 如下。

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.cache.provider_class">org.hibernate.cache.infinispan.InfinispanRegionFactory</property>
        <property name="connection.url">jdbc:derby://localhost:1527/JH</property>
        <property name="connection.driver_class">org.apache.derby.jdbc.ClientDriver</property>
        <property name="connection.username">app</property>
        <property name="connection.password">app</property>
        <property name="connection.pool_size">0</property>
        <property name="dialect">org.hibernate.dialect.DerbyDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="hbm2ddl.auto">update</property>
        <property name="hibernate.show_sql">true</property>
    </session-factory>
</hibernate-configuration>

如何纠正这种情况?非常感谢。

线程“主”org.hibernate.MappingException 中的异常:重复 实体映射中的列: com.madhusudhan.jh.advanced.inheritance.s1.Executive 栏目:角色 (应该用 insert="false" update="false" 映射)

我不想删除Executive 类中的“角色”,因为它们在XML 映射下运行良好,如下所示。

<?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">
<hibernate-mapping package="com.madhusudhan.jh.advanced.inheritance.s1">
  <class name="Employee" table="INHERITANCE_S1_EMPLOYEE" discriminator-value="EMPLOYEE">
    <id  name="id" column="EMPLOYEE_ID">
      <generator class="native"/>
    </id>
    <discriminator column="DISCRIMINATOR" type="string"/>

    <property name="name" column="NAME" />
    <subclass name="Executive" extends="Employee" discriminator-value="EXECUTIVE">
        <property name="role" column="ROLE"/>
    </subclass>

  </class>
</hibernate-mapping>

【问题讨论】:

  • 你能检查一下你在 INHERITANCE_S1_EMPLOYEE_ANN 类中是否有角色字段吗?

标签: java hibernate


【解决方案1】:

Executive 正在扩展 Employee。所以没有必要在那里重新声明role。如果你从Executive 中删除它,它仍然可以工作。它只是简单地继承属性。您是否尝试将它们连接为两个关系表?例如roleforeign key

【讨论】:

  • 这只是一书中的一个例子。我很好奇如何更正注释以使其工作。如您所见,XML 映射在有两个“角色”字段的情况下工作得很好。
  • 据我所知,当我映射两个相关表时,我不会扩展父表。我只是使用@JoinColumn( name = &lt;foreign key&gt; )@JsonBackReference 在子类中的父实现上使用@ManyToOne@OneToMany 注释,而对于父类中的子实现我使用@ElementCollection @CollectionTable( name = &lt;foreign key&gt; )
猜你喜欢
  • 2013-08-05
  • 1970-01-01
  • 2014-06-20
  • 2012-08-13
  • 2016-01-16
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
相关资源
最近更新 更多