Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate的外键问题(Bug?)_Java_Spring_Hibernate_Firebird - Fatal编程技术网

Java Hibernate的外键问题(Bug?)

Java Hibernate的外键问题(Bug?),java,spring,hibernate,firebird,Java,Spring,Hibernate,Firebird,在我们目前的项目中,我们遇到了一些困难。我最近更改了一些HibernateBean,我们的文章Bean和一些底层的东西,我运行了一些测试,一切看起来都很好。现在,我的队友对此消息有例外: 外键FK_09fd525ae6654c059394d22cc15:ARTBILDER[artikel_FK,servdat_FK]必须与引用的主键artikel[AUTOIN_FIX]具有相同的列数 注释绝对正确。我也有同样的问题,决定从头开始在我的电脑上设置项目,问题就解决了。这些问题的原因是什么 我们正在处

在我们目前的项目中,我们遇到了一些困难。我最近更改了一些HibernateBean,我们的文章Bean和一些底层的东西,我运行了一些测试,一切看起来都很好。现在,我的队友对此消息有例外:

外键FK_09fd525ae6654c059394d22cc15:ARTBILDER[artikel_FK,servdat_FK]必须与引用的主键artikel[AUTOIN_FIX]具有相同的列数

注释绝对正确。我也有同样的问题,决定从头开始在我的电脑上设置项目,问题就解决了。这些问题的原因是什么

我们正在处理遗留数据库,只将对象映射到数据库,而不使用hibernate生成数据库。我们正在使用HibernateSearch进行全文搜索,这可能与此相关,因为第一次出现这种情况是在我添加HibernateSearch注释之后

我们正在使用Firebird 2.5实例

编辑:

以下是错误来自的属性:

ID类:

@Embeddable
public class ID implements Serializable {
    private static final long serialVersionUID = 1810044174631580834L;

    private Long autoin;
    private Integer serverId;

    public ID() {
    }

    public ID(Long autoin, Integer serverId) {
        this.autoin = autoin;
        this.serverId = serverId;
    }

    @Column(name = "autoin_fix")
    public Long getAutoin() {
        return this.autoin;
    }

    @Column(name = "servdat_fk")
    public Integer getServerId() {
        return this.serverId;
    }

    public void setAutoin(Long autoin) {
        this.autoin = autoin;
    }

    public void setServerId(Integer serverId) {
        this.serverId = serverId;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((this.autoin == null) ? 0 : this.autoin.hashCode());
        result = prime * result
                + ((this.serverId == null) ? 0 : this.serverId.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (this.getClass() != obj.getClass()) {
            return false;
        }
        ID other = (ID) obj;
        if (this.autoin == null) {
            if (other.autoin != null) {
                return false;
            }
        } else if (!this.autoin.equals(other.autoin)) {
            return false;
        }
        if (this.serverId == null) {
            if (other.serverId != null) {
                return false;
            }
        } else if (!this.serverId.equals(other.serverId)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return new StringBuilder().append("ID [").append(this.autoin)
                .append("_").append(this.serverId).append("]").toString();
    }

}
文章类别:

@Indexed
@Entity
@Table(name = "ARTIKEL")
public class Article {

    private ID id;
    private List<Picture> pictures;

        ...

    @DocumentId
    @EmbeddedId
    @FieldBridge(impl = IDBridge.class)
    public ID getId() {
        return id;
    }

    @OneToMany
    @JoinColumns({
        @JoinColumn(name = "artikel_fk", referencedColumnName = "autoin_fix"),
        @JoinColumn(name = "servdat_fk", referencedColumnName = "servdat_fk") })
    @IndexedEmbedded
    public List<Picture> getPictures() {
            return pictures;
    }  

}
EDIT2:我可能知道这是从哪里来的,请稍候

编辑3:不,不是错误

EDIT4:以下是DDL:

CREATE TABLE ARTIKEL
(
  AUTOIN_FIX NUM10_0 DEFAULT 0,
  SERVDAT_FK NUM10_0 DEFAULT 0,
  ...
  PRIMARY KEY (AUTOIN_FIX,SERVDAT_FK)
);

CREATE TABLE ARTBILDER
(
  AUTOIN_FIX NUM10_0 DEFAULT 0,
  ARTIKEL_FK NUM10_0 DEFAULT 0,
  SERVDAT_FK NUM10_0 DEFAULT 0,
  ...
  PRIMARY KEY (AUTOIN_FIX,SERVDAT_FK)
);
这里已经满了

或者更具描述性

@Entity
public class Parent implements Serializable {
    @Id
    public ParentPk id;
    public int age;

    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumns ({
        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
    })
    public Set<Child> children; //unidirectional
    ...
} 

你能发布完整的stacktrace吗?错误很明显。一个表中有一个单列主键,另一个表中有一个复合外键。不能创建连接这两个键的关系。你的处境很奇怪。你能提供更多的信息吗?实体、数据库结构和stacktrace.full stacktrace不可用,sry。请发布@FlyingDumpling询问的信息,就像整个实体一样,包括带有错误属性、图片和嵌入id的实体,以及有关表设置的信息。更好吗?或者我应该提供更多的信息?
OneToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "DATA_VALUE", joinColumns = {
        @JoinColumn(name = "DATA_ID"),
    }, inverseJoinColumns = {
        @JoinColumn(name = "COLUMN_NM")
    })    
    List<DataValue> dataValueList;
@Entity
public class Parent implements Serializable {
    @Id
    public ParentPk id;
    public int age;

    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumns ({
        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
    })
    public Set<Child> children; //unidirectional
    ...
}