gpt4 book ai didi

java - 如何使用 Hibernate @Any 相关的注解?

转载 作者:IT老高 更新时间:2023-10-28 21:08:05 27 4
gpt4 key购买 nike

有人可以向我解释一下 Any 相关的注释(@Any@AnyMetaDef@AnyMetaDefs@ManyToAny) 在实践中工作。我很难找到任何关于这些的有用文档(仅 JavaDoc 不是很有帮助)。

到目前为止,我已经收集到它们以某种方式启用对抽象类和扩展类的引用。如果是这种情况,为什么没有 @OneToAny 注释?这个“any”是指一个“any”还是多个“any”?

非常感谢一个简短、实用且说明性的示例(不必编译)。

编辑:尽管我愿意接受作为答案的回复并在适当的时候给予赞扬,但我发现 Smink 和 Sakana 的答案都提供了丰富的信息。因为我不能接受多个回复作为答案,所以很遗憾,我将两者都标记为答案。

最佳答案

希望 article为主题带来一些亮点:

Sometimes we need to map an association property to different types of entities that don't have a common ancestor entity - so a plain polymorphic association doesn't do the work.

例如,让我们假设管理媒体库的三个不同应用程序 - 第一个应用程序管理图书借阅,第二个应用程序管理 DVD,第三个应用程序管理 VHS。这些应用程序没有任何共同点。现在我们要开发一个新的应用程序来管理所有三种媒体类型并重用现有的 Book、DVD 和 VHS 实体。由于 Book、DVD 和 VHS 类来自不同的应用程序,它们没有任何祖先实体——共同的祖先是 java.lang.Object。我们仍然希望有一个 Borrow 实体,它可以引用任何可能的媒体类型。

为了解决这种类型的引用,我们可以使用 any 映射。此映射始终包含多个列:一列包含当前映射属性所引用的实体的类型,另一列包含实体的标识,例如,如果我们引用一本书,它的第一列将包含一个标记Book 实体类型,第二个将包含特定书籍的 id。

@Entity
@Table(name = "BORROW")
public class Borrow{

@Id
@GeneratedValue
private Long id;

@Any(metaColumn = @Column(name = "ITEM_TYPE"))
@AnyMetaDef(idType = "long", metaType = "string",
metaValues = {
@MetaValue(targetEntity = Book.class, value = "B"),
@MetaValue(targetEntity = VHS.class, value = "V"),
@MetaValue(targetEntity = DVD.class, value = "D")
})
@JoinColumn(name="ITEM_ID")
private Object item;

.......
public Object getItem() {
return item;
}

public void setItem(Object item) {
this.item = item;
}

}

关于java - 如何使用 Hibernate @Any 相关的注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/217831/

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