【问题标题】:Hibernate @Inheritance(strategy=InheritanceType.JOINED) with different schemata causes error (HHH000099)具有不同模式的休眠 @Inheritance(strategy=InheritanceType.JOINED) 会导致错误 (HHH000099)
【发布时间】:2018-05-30 15:48:28
【问题描述】:

从 Hibernate 4.2 升级到 5.5.5 后,我的继承不再起作用。启动我的应用程序会引发以下错误:

ERROR AssertionFailure:33 - HHH000099:发生断言失败(这可能表明 Hibernate 中存在错误,但更有可能是由于会话使用不安全):org.hibernate.AssertionFailure: Table BASE.ANIMAL not found

这里是我的课程:

cat.java

package ext;

import java.io.Serializable;
import javax.persistence.*;
@Entity
@org.hibernate.annotations.Proxy(lazy=false)
@Table(name="CAT", schema="EXT")
@Inheritance(strategy=InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name="ANIMALid", referencedColumnName="id")
public class CAT extends base.ANIMAL implements Serializable {
    public CAT() {
    }

    public String toString() {
        return super.toString();
    }

}

animal.java

package base;

import java.io.Serializable;
import javax.persistence.*;
@Entity
@org.hibernate.annotations.Proxy(lazy=false)
@Table(name="ANIMAL", schema="BASE")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorValue("ANIMAL")
public class ANIMAL implements Serializable {
    public ANIMAL() {
    }

    @Column(name="id", nullable=false, unique=true, length=10)  
    @Id 
    @GeneratedValue(generator="BASE_ANIMAL_ID_GENERATOR")   
    @org.hibernate.annotations.GenericGenerator(name="BASE_ANIMAL_ID_GENERATOR", strategy="native", parameters={ @org.hibernate.annotations.Parameter(name="schema", value="BASE") })   
    private int id;

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

    public int getId() {
        return id;
    }

    public int getORMID() {
        return getId();
    }

    public String toString() {
        return String.valueOf(getId());
    }

}

测试类

package ormsamples;

import org.orm.*;
public class CreateJoinedinheritanceData {
    public void createTestData() throws PersistentException {
        PersistentTransaction t = ext.JoinedinheritancePersistentManager.instance().getSession().beginTransaction();
        try {
            base.ANIMAL bASEANIMAL = base.ANIMALDAO.createANIMAL();
            // Initialize the properties of the persistent object here
            base.ANIMALDAO.save(bASEANIMAL);
            ext.CAT eXTCAT = ext.CATDAO.createCAT();
            // Initialize the properties of the persistent object here
            ext.CATDAO.save(eXTCAT);
            t.commit();
        }
        catch (Exception e) {
            t.rollback();
        }

    }

    public static void main(String[] args) {
        try {
            CreateJoinedinheritanceData createJoinedinheritanceData = new CreateJoinedinheritanceData();
            try {
                createJoinedinheritanceData.createTestData();
            }
            finally {
                ext.JoinedinheritancePersistentManager.instance().disposePersistentManager();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我是否错过了迁移步骤,或者最新的 hibernate 5 版本中是否存在错误?

期待您的建议!

【问题讨论】:

  • @Inheritance(strategy=InheritanceType.JOINED) 只在父类而不是子类中需要,如果我错了,请纠正我
  • 正确,但错误依旧????
  • github.com/shubhamchopra3/Hibernate-demo/tree/master/…你可以参考我的git repo,这里我用hibernate 5.2创建了JoinedStrategy继承
  • 感谢您的链接,但您的示例没有模式,我认为这是我示例中的问题。

标签: java hibernate


【解决方案1】:

在做了更多研究后,我遇到了这个休眠错误HHH-10490

使用catalog 而不是schema 的答案被拒绝。不幸的是没有给出进一步的解释,但如果我改变这一行

@Table(name="ANIMAL", schema="BASE")

@Table(name="ANIMAL", catalog="BASE")

一切都恢复正常了。

类似于这个post,bug作者here也有描述。

【讨论】:

    猜你喜欢
    • 2015-06-28
    • 2020-10-30
    • 1970-01-01
    • 2017-03-23
    • 2012-09-08
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多