基本的JPA问题:“无法确定类型:java.util.Set”

我刚开始在Play Framework Web应用程序中构建我的JPA架构。我对SQL有一个合理的理解,但我是一个JPA新手,我在第一个障碍时被绊倒了。 从Play教程我假设您只是创建Java类,JPA / Play将自动为您创建架构。 所以我想在两个模型类(Rankable和Tag)之间创建一个ManyToMany关系:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Rankable extends Model {
    public String name;
    private Set<Tag> tags;

    @ManyToMany()
    @JoinTable(name = "RANKABLE_TAGS")
    public Set<Tag> getTags() {
        return tags;
    }

    @ManyToMany()
    @JoinTable(name = "RANKABLE_TAGS")
    public void setTags(final Set<Tag> tags) {
        this.tags = tags;
    }
}
而另一类:
@Entity
public class Tag extends Model {
    public String name;
    public String description;
    private Set<Rankable> rankables;

    @ManyToMany(mappedBy = "tags")
    public Set<Rankable> getRankables() {
        return rankables;
    }

    @ManyToMany(mappedBy = "tags")
    public void setRankables(final Set<Rankable> r) {
        rankables = r;
    }
}
但我不断收到以下错误:   发生了JPA错误(无法构建   EntityManagerFactory):不能   确定类型:java.util.Set,at   table:Rankable,对于列:   [org.hibernate.mapping.Column(标签)] 我究竟做错了什么?     
已邀请:
在我们的例子中,原因是我们在场上有一些注释,有些注释在吸气剂上。换句话说,对于特定字段,注释应该在字段上或在getter上。将它们结合在吸气剂上为我们解决了问题。似乎异常没有显示问题的真正原因。 顺便说一句,我们使用这种语法进行了许多注释: 实体:
@ManyToMany
@JoinTable(name = "join_table", joinColumns = { @JoinColumn(name =
"leftjoinid") }, inverseJoinColumns = { @JoinColumn(name = "rightjoinid") }) 
实体:
@ManyToMany
@JoinTable(name = "join_table", joinColumns = { @JoinColumn(name =
"rightjoinid") }, inverseJoinColumns = { @JoinColumn(name = "leftjoinid") }) 
    
最后这似乎有效,虽然我不确定为什么:
@Entity
public class Tag extends Model {
    public String name;
    public String description;

    @ManyToMany(mappedBy = "tags", cascade = CascadeType.ALL)
    public Set<Rankable> rankables;
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Rankable extends Model {
    @ManyToOne(cascade = CascadeType.ALL)
    public User creator;

    public String name;

    @ManyToMany()
    public Set<Tag> tags;
}
    
看起来
@ManyToMany
没有生效。 也许这与注释的放置有些混淆。确保你的getter有相应的setter(
setTags()
),所有其他注释也放在属性上(不在字段上)。     

要回复问题请先登录注册