【问题标题】:[ERROR] ORA-00918: column ambiguously defined[错误] ORA-00918: 列定义不明确
【发布时间】:2013-01-28 17:37:56
【问题描述】:

有两个实体:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Person implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    ...
}

@Entity
public class Man extends Person {
    ...
}

尝试执行以下方法:

@Test
public void clear(EntityManager em) {
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    System.out.println(em
            .createQuery("delete from Man m where m.id > 14582647")
            .executeUpdate());
    tx.commit();
}

得到错误:

[ERROR] ORA-00918: column ambiguously defined

hibernate.show_sql 显示 sql 查询:

Hibernate: insert into HT_Man select man0_.id as id from Man man0_ inner join Person man0_1_ on man0_.id=man0_1_.id where id=14582647
Hibernate: delete from HT_Man

错误发生在 id = 14582647 的地方,因为必须不止 id,例如 ma​​n0_.id。如何生成正确的sql-query?

【问题讨论】:

    标签: hibernate jakarta-ee jpa orm createquery


    【解决方案1】:

    在 Man 类上添加 @PrimaryKeyJoinColumn 注解:

    @Entity
    @PrimaryKeyJoinColumn(name = "<pk column name in Man table>")
    public class Man extends Person {
        ...
    }
    

    此外,您应该在 Person 中定义一个 Discriminator 列,在 Man 中定义 @DiscriminatorValue,以便 Hibernate 可以确定要加入哪些表(当您引入一个 Woman 表时)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      相关资源
      最近更新 更多