gpt4 book ai didi

java - Hibernate 的外键问题(Bug?)

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:25 24 4
gpt4 key购买 nike

在我们当前的项目中,我们遇到了一些困难。我最近更改了一些 Hibernate Bean(我们的 Article Bean 和一些底层的东西),我运行了一些测试,一切看起来都很好。现在我的队友对此消息有异常:

外键 (FK_09fd525ae6654c059394d22cc15:ARTBILDER [artikel_fk,servdat_fk])) 必须与引用的主键 (ARTIKEL [AUTOIN_FIX]) 具有相同的列数

注释绝对正确。我遇到了同样的问题,并决定从头开始在我的计算机上设置该项目,问题就消失了。造成这些问题的原因是什么?

我们正在开发一个遗留数据库,并且仅将我们的对象映射到数据库,而不是使用 hibernate 生成数据库。我们正在使用 HibernateSearch 进行全文搜索(也许这是相关的,因为第一次发生这种情况是在我添加 HibernateSearch Annotations 之后)。

我们正在使用 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;
}

}

图片类:

@Entity
@Table(name = "ARTBILDER")
public class Picture extends BasePicture {

...

protected ID id;

@EmbeddedId
@FieldBridge(impl = IDBridge.class)
@Field(store = Store.YES, index = Index.YES)
public ID getId() {
return id;
}

...
}

EDIT2:我可能知道它来自哪里,请等待。

EDIT3:不,不是错误。

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)
);

最佳答案

这里是完整的link and description

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
...
}

关于java - Hibernate 的外键问题(Bug?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20563829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com