多对多关系返回空集合

我正在尝试创建两个实体之间具有多对多关系的实体。第一个实体是以PID作为主键的Person ,第二个是以SID作为主键的Serie。在数据库中有一个表TJV_5_SERIE_2_PERSON,它表示这些实体之间的多对多关系。

问题是当我检索任何实体时,使用 @ManyToMany 注释的 Collection 始终为空。所以我假设我在代码中搞砸了一些东西,这解释了为什么我的多对多关系不起作用。


我通过生成(在 Netbeans 9.0 中)“来自实体类的 Restful Web 服务”来检索这两个实体。这样,我可以使用这些服务成功检索所有属性,但带有 @ManyToMany 注释的 Collection 始终为空。


任何想法为什么它不值得赞赏。这是第一次尝试,所以请原谅我的任何愚蠢错误。


人物类:


@Entity

@Table(name = "TJV_5_PERSON")

@XmlRootElement

public 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;

        }

  

POPMUISE
浏览 155回答 2
2回答

陪伴而非守候

我不是 100% 确定,但由于 Serie.class 方法上方的 @XMLTransiet 注释,您可能无法检索任何结果@XmlTransientpublic&nbsp;Collection<Person>&nbsp;getFans()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;fans;}尝试查看文档https://docs.oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlTransient.html

慕后森

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

相关分类

Java