首页 > 解决方案 > @OneToMany 其中 mappedBy 是 @Any

问题描述

我有一个由 interface 表示的多态关系commentable。评论可以针对帖子以及其他评论。

我能够代表该关系的评论方,检索目标帖子,但我无法代表帖子方 - 例如,我无法从帖子中获取评论。

我将@Any 用于多态性,但如果这不是正确的方法,那么我会很乐意改变方向。

如果我只有评论代码,一切正常

// Comment.java
@Any(
        metaDef = "CommentableMetaDef",
        metaColumn = @Column(name = "commentable_entity")
)
@JoinColumn(name = "commentable_id")
private Commentable target;
// Post.java
@OneToMany(mappedBy = "target", targetEntity = Comment.class)
private Set<Comment> comments;

^^ 这打破了。

如果它是相关的,这是我metaDef在 package-info.java的内部

// package-info.java
@AnyMetaDef(name = "CommentableMetaDef", metaType = "string", idType = "int",
        metaValues = {
                @MetaValue(value = "COM", targetEntity = Comment.class),
                @MetaValue(value = "POS", targetEntity = Post.class)
        }
)
@AnyMetaDef(name = "ReactableMetaDef", metaType = "string", idType = "int",
        metaValues = {
                @MetaValue(value = "COM", targetEntity = Comment.class),
                @MetaValue(value = "POS", targetEntity = Post.class)
        }
)

标签: springhibernatejpapolymorphism

解决方案


推荐阅读