为了账号安全,请及时绑定邮箱和手机立即绑定

多对多关系返回空集合

多对多关系返回空集合

POPMUISE 2022-05-25 16:06:02
我正在尝试创建两个实体之间具有多对多关系的实体。第一个实体是以PID作为主键的Person ,第二个是以SID作为主键的Serie。在数据库中有一个表TJV_5_SERIE_2_PERSON,它表示这些实体之间的多对多关系。问题是当我检索任何实体时,使用 @ManyToMany 注释的 Collection 始终为空。所以我假设我在代码中搞砸了一些东西,这解释了为什么我的多对多关系不起作用。我通过生成(在 Netbeans 9.0 中)“来自实体类的 Restful Web 服务”来检索这两个实体。这样,我可以使用这些服务成功检索所有属性,但带有 @ManyToMany 注释的 Collection 始终为空。任何想法为什么它不值得赞赏。这是第一次尝试,所以请原谅我的任何愚蠢错误。人物类:@Entity@Table(name = "TJV_5_PERSON")@XmlRootElementpublic class Person implements Serializable {    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    @Column(name = "PID")    private Integer id;    @Column(name = "PNAME")    private String name;    @ManyToMany()    @JoinTable(        name = "TJV_5_SERIE_2_PERSON",        joinColumns = @JoinColumn(name = "PID", referencedColumnName = "PID"),        inverseJoinColumns = @JoinColumn(name = "SID", referencedColumnName = "SID")    )        // always empty    private Collection<Serie> favourites = new ArrayList<Serie>();    public Person() {    }    public Person(Integer id, String name) {        this.id = id;        this.name = name;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @XmlTransient    public Collection<Serie> getFavourites() {        return favourites;    }    public void setFavourites(Collection<Serie> favourites) {        this.favourites = favourites;    }    @Override    public int hashCode() {        int hash = 5;        hash = 31 * hash + Objects.hashCode(this.id);        return hash;    }    @Override    public boolean equals(Object obj) {        if (this == obj) {            return true;        }        if (obj == null) {            return false;        }        if (getClass() != obj.getClass()) {            return false;        }  
查看完整描述

2 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

我不是 100% 确定,但由于 Serie.class 方法上方的 @XMLTransiet 注释,您可能无法检索任何结果

@XmlTransientpublic Collection<Person> getFans() {    return fans;}

尝试查看文档https://docs.oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlTransient.html

查看完整回答
反对 回复 2022-05-25
?
慕后森

TA贡献1802条经验 获得超5个赞

另一个问题是两个对应的@ManyToMany 表之间的级联数据。这意味着您有交集,当您使用某种类型的级联时,数据会自动出现在此表中,但您需要发送 POST 请求。这意味着在您的服务类层中,您可以创建一个负责创建 Person 的方法并将一个 Serie 分配给这个作为外键的 Person 对象。关于级联的文章在这里 :) https://vladmihalcea.com/a-beginners-guide-to-jpa-and-hibernate-cascade-types/


查看完整回答
反对 回复 2022-05-25
  • 2 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号