gpt4 book ai didi

java - Hibernate 搜索与具有复合 ID 的 IndexEmbedded 属性关联

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

当类 A 有一个主键 id1,类 B 有一个由 id1 和 id2 组成的复合键时,我们如何将类 A 与类 B 关联起来。

代码如下所示:

@Entity
@Indexed
public class ClassA {

@Id
@DocumentId
private Integer id1;

@Field
private Integer description;

@ManyToOne(cascade = {CascadeType.ALL})
@IndexEmbedded
ClassB b;

// getters and setters

}


@Entity
public class ClassB {

@EmbdeddedId
@DocumentId
private ClassB_Pk id;
}

@Embeddable
public class ClassB_Pk {

private Integer id1;
private Integer id2;

// getters and setters

}

解决方法1:

public class classA {

@ManyToOne(cascade = { CascadeType.ALL})
@IndexedEmbedded
@JoinColumn(name="id1")
private ClassB b;

}

收到错误:Student_Main 的列号错误。应该是2

解决方法2:

public class classA {

@ManyToOne(cascade = { CascadeType.ALL})
@IndexedEmbedded
@MapsId("id1")
private ClassB b;

}

错误:没有抛出错误,但没有发生索引(用卢克检查)

我偶然发现这个问题已经有一段时间了。任何建议将不胜感激。

提前谢谢

最佳答案

问题已经解决了。实际上,从 A 类到 B 类存在 OneToMany 关系。我更改了这些类之间的关系,并在它们两个上都添加了“JoinColumn”注释。代码如下所示:

@Entity
@Indexed
public class ClassA {
@Id
@DocumentId
private Integer id1;

@Field
private Integer description;

@OneToMany(fetch=FetchType.EAGER, cascade = {CascadeType.ALL})
@IndexEmbedded
@JoinColumn(name="id1", referencedColumn="id1", updatable = false, insertable = false)
Set<ClassB> b;

// getters and setters

}

@Entity
public class ClassB {
@EmbeddedId
@DocumentId
private ClassB_Pk id;

@ContainedIn
@ManyToOne(fetch=FetchType.EAGER, cascade = {CascadeType.ALL})
@JoinColumn(name="id2", referencedColumnName="id2", insertable=false, updatable=false)
ClassA a;


// other properties
// setters and getters

}

@Embeddable
public class ClassB_Pk {
private Integer id1;
private Integer id2;

// getters and setters

}

希望这对遇到类似情况的人有所帮助。

关于java - Hibernate 搜索与具有复合 ID 的 IndexEmbedded 属性关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23178923/

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