Hibernate @多个休眠错误:“多个休眠错误”;“未定义目标实体”+&引用;集合映射的属性类型必须是java.util.collection…“;

Hibernate @多个休眠错误:“多个休眠错误”;“未定义目标实体”+&引用;集合映射的属性类型必须是java.util.collection…“;,hibernate,collections,many-to-many,entity,target,Hibernate,Collections,Many To Many,Entity,Target,我试图在两个实体类:Produkt.java和Punkt.java之间创建一个多实体关系。我完全按照hibernate文档和各种教程所显示的那样做了,而且看起来很有效,但在两个实体类中的@ManyToMany注释上都出现了两个错误 错误是: “未定义目标实体” “集合映射的属性类型必须为 java.util.Collection、java.util.Set、java.util.List或java.util.Map“ 以下是守则的相关部分: Produkt.java @Entity @Tabl

我试图在两个实体类:Produkt.java和Punkt.java之间创建一个多实体关系。我完全按照hibernate文档和各种教程所显示的那样做了,而且看起来很有效,但在两个实体类中的@ManyToMany注释上都出现了两个错误

错误是:

  • “未定义目标实体”
  • “集合映射的属性类型必须为 java.util.Collection、java.util.Set、java.util.List或java.util.Map“
以下是守则的相关部分:

Produkt.java

@Entity
@Table(name = "produkt")
public class Produkt {

    @Id @GeneratedValue
    @Column(name = "PRODUCT_ID", unique = true, nullable = false)
    long productId;
    .
    .
    .

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "PRODUKT_PUNKT", joinColumns = { 
    @JoinColumn(name = "PRODUCT_ID", nullable = false, updatable = false) }, 
        inverseJoinColumns = { @JoinColumn(name = "PUNKT_ID", 
                nullable = false, updatable = false) })
    private List<Punkt>punkte;

    public Produkt() {
    }

    public Produkt(List<Punkt>punkte) {
        this.punkte = punkte;
    }

    public List<Punkt> getPunkte() {
        return punkte;
    }

    public void setPunkte(List<Punkt> punkte) {
        this.punkte = punkte;
    }
}
@Entity
@Table(name = "punkt")
public class Punkt {

    @Id @GeneratedValue
    @Column(name="PUNKT_ID")
    private long punktId;

    .
    .
    .

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "punkte")
    private List<Produkt>produkte;

    public Punkt() {
    }

    public Punkt(List<Produkt>produkte) {
        this.produkte = produkte;
    }

    public List<Produkt> getProdukte() {
        return produkte;
    }

    public void setProdukte(List<Produkt> produkte) {
        this.produkte = produkte;
    }
}
@实体
@表(name=“produkt”)
公共类产品{
@Id@GeneratedValue
@列(name=“PRODUCT_ID”,unique=true,nullable=false)
长productId;
.
.
.
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name=“PRODUKT_PUNKT”,joinColumns={
@JoinColumn(name=“PRODUCT_ID”,nullable=false,updateable=false)},
inverseJoinColumns={@JoinColumn(name=“PUNKT_ID”,
nullable=false,updateable=false)})
私人Listpunkte;
公共产品(){
}
公共产品(Listpunkte){
this.punkte=punkte;
}
公共列表getPunkte(){
返回朋克特;
}
公共无效设置punkte(列表punkte){
this.punkte=punkte;
}
}
Punkt.java

@Entity
@Table(name = "produkt")
public class Produkt {

    @Id @GeneratedValue
    @Column(name = "PRODUCT_ID", unique = true, nullable = false)
    long productId;
    .
    .
    .

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "PRODUKT_PUNKT", joinColumns = { 
    @JoinColumn(name = "PRODUCT_ID", nullable = false, updatable = false) }, 
        inverseJoinColumns = { @JoinColumn(name = "PUNKT_ID", 
                nullable = false, updatable = false) })
    private List<Punkt>punkte;

    public Produkt() {
    }

    public Produkt(List<Punkt>punkte) {
        this.punkte = punkte;
    }

    public List<Punkt> getPunkte() {
        return punkte;
    }

    public void setPunkte(List<Punkt> punkte) {
        this.punkte = punkte;
    }
}
@Entity
@Table(name = "punkt")
public class Punkt {

    @Id @GeneratedValue
    @Column(name="PUNKT_ID")
    private long punktId;

    .
    .
    .

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "punkte")
    private List<Produkt>produkte;

    public Punkt() {
    }

    public Punkt(List<Produkt>produkte) {
        this.produkte = produkte;
    }

    public List<Produkt> getProdukte() {
        return produkte;
    }

    public void setProdukte(List<Produkt> produkte) {
        this.produkte = produkte;
    }
}
@实体
@表(name=“punkt”)
公共级朋克{
@Id@GeneratedValue
@列(name=“PUNKT\u ID”)
私人长朋克梯德;
.
.
.
@ManyToMany(fetch=FetchType.LAZY,mappedBy=“punkte”)
私人上市公司;
公众朋克(){
}
公共Punkt(Listprodukte){
this.produkte=produkte;
}
公共列表getProdukte(){
返回产品;
}
公共无效setProdukte(列表produkte){
this.produkte=produkte;
}
}
hibernate.cfg.xml(位于/src-folder中)


如前所述,整个构造似乎可以工作——我可以运行应用程序,我可以创建这两个类的实例,用数据填充它们,并持久化到数据库。现在唯一的问题似乎是带有@manytomy-annotation的两行在eclipse中被标记为红色

任何帮助都将不胜感激!如果需要更多信息来解决问题,请告诉我

@JoinTable(name = "PRODUKT_PUNKT"
在您的
Punkt
类中,您已定义

@Table(name = "punkt")
public class Punkt
应该是

@Table(name = "PRODUKT_PUNKT")
public class Punkt
换句话说:
@JoinTable
name参数应与另一端的
@Table
定义的名称匹配

在您的
Punkt
类中,您已定义

@Table(name = "punkt")
public class Punkt
应该是

@Table(name = "PRODUKT_PUNKT")
public class Punkt

换句话说:
@JoinTable
name参数应该与另一端的
@Table
定义的名称匹配。

好的,在搜索和尝试之后,我终于找到了这两个问题的答案:

  • “目标实体未定义”是由第二个表的假名称引起的,正如isah已经写到的。 但是,这不是巧合,而是我对实体映射的基本工作方式的误解。所有教程都使用第三个表来链接这两个表。我实际上认为,当我使用@manytomy-Annotation时,hibernate在后台就是这么做的,因为我使用的是内部示例数据库,每次部署应用程序时都会创建和删除该数据库
  • “集合映射的属性类型必须是java.util.collection、java.util.Set、java.util.List或java.util.Map”消息是一个未解决的JBoss错误

    即使我删除了所有的收藏和@ManyToMany部分,它仍然存在。当我注释掉构造函数时,它消失了。现在我再次插入构造函数,错误不在那里


  • 好的,经过搜索和尝试,我终于找到了这两个问题的答案:

  • “目标实体未定义”是由第二个表的假名称引起的,正如isah已经写到的。 但是,这不是巧合,而是我对实体映射的基本工作方式的误解。所有教程都使用第三个表来链接这两个表。我实际上认为,当我使用@manytomy-Annotation时,hibernate在后台就是这么做的,因为我使用的是内部示例数据库,每次部署应用程序时都会创建和删除该数据库
  • “集合映射的属性类型必须是java.util.collection、java.util.Set、java.util.List或java.util.Map”消息是一个未解决的JBoss错误

    即使我删除了所有的收藏和@ManyToMany部分,它仍然存在。当我注释掉构造函数时,它消失了。现在我再次插入构造函数,错误不在那里


  • 伊萨,谢谢你这么快的回复。不幸的是,将列表更改为集合并没有改变任何东西(错误消息还说,集合映射的类型可以是列表)。对于第二条错误消息,您是对的。我误解了这个问题。我不知道是什么原因造成的。伊莎,非常感谢你的回答。它帮助我理解了那些@manytoman-annotation的结构(写在我下面的帖子中)。不幸的是,我不能投票,因为我没有足够的声誉。当我有足够的时间时,我会回来的:)很高兴这有帮助,不用担心不会投票:)伊萨,谢谢你这么快的回复。不幸的是,将列表更改为集合并没有改变任何东西(错误消息还说,集合映射的类型可以是列表)。对于第二条错误消息,您是对的。我误解了这个问题。我不知道是什么原因。伊莎,非常感谢你的回答