2017-08-30 3 views
0

twiエンティティがあります。カテゴリのエンティティ:JAXB:オブジェクトグラフでサイクルが検出されました

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
@Entity 
@Table(name = "EPBS_DATA.NEWS_CATEGORY") 
@XmlType(propOrder = { "id", "name", "news" }) 
public class CategoryEntity { 
    public final static String ID_GENERATOR_NAME = 
    "EPBS_DATA.sq_news_category"; 
    @Id 
    @Column(name = "ID", nullable = false) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, 
       generator = ID_GENERATOR_NAME) 
    @SequenceGenerator(name = ID_GENERATOR_NAME, 
        sequenceName = ID_GENERATOR_NAME, allocationSize = 1) 
    private long id; 

    @Column(name = "CATEGORY_NAME", nullable = false, length = 1024) 
    private String name; 
    @ManyToMany(mappedBy = "categories") 
    @XmlElementWrapper(name = "news") 
    @XmlElement(name = "") 
    private List<NewsEntity> news = new ArrayList<NewsEntity>(); 

    setters/getters 
} 

とNewsEntity

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
@Entity 
@Table(name = "EPBS_DATA.NEWS") 
@XmlType(propOrder = 
    { "id", "body", "lead", "creatorId", "date", "federal", "regId", 
     "raw", "file", "title", "editDate", "fixed", "categories", 
     "publishDates" }) 
public class NewsEntity { 
    public final static String ID_GENERATOR_NAME = "EPBS_DATA.SQ_EPBS"; 
    public final static String GET_NEWS_BY_DATE = "NewsEntity.getNewsByDate"; 
    public final static String GET_NEWS_COUNT = "NewsEntity.getNewsCount"; 
    public final static String GET_DATES = "NewsEntity.getDates"; 
    @Id 
    @Column(name = "NEWS_ID", nullable = false) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, 
       generator = ID_GENERATOR_NAME) 
@SequenceGenerator(name = ID_GENERATOR_NAME, 
        sequenceName = ID_GENERATOR_NAME, allocationSize = 1) 
    private long id; 
    @Column(name = "NEWS_BODY", nullable = true) 
    @Lob 
    private String body; 
    @ManyToMany 
    @JoinTable(name = "EPBS_DATA.NEWS_CATEGORY_ASSIGMENT", 
      joinColumns = @JoinColumn(name = "ID_NEWS", 
            referencedColumnName = "NEWS_ID"), 
      inverseJoinColumns = 
      @JoinColumn(name = "ID_CATEGORY", referencedColumnName = "ID")) 
    @XmlInverseReference(mappedBy = "news") 
    @XmlElementWrapper(name = "categories") 
    @XmlElement(name = "") 
    private List<CategoryEntity> categories = new ArrayList<CategoryEntity>(); 

Iは、サイクルは、オブジェクト・グラフ中に検出されたエラーを有しています。私は@XmlTransientと@XmlInverseReferenceを使用してみてください、私は持っているものは何でも> [email protected]]

- > [email protected] - [email protected]:これは無限に深いXMLの原因となりますエラー。

+0

このデータはありません - [email protected]は自分自身を参照していますか?あなたのデータは何ですか? – farrellmr

+1

JPAプロバイダは、このようなことに対処できるので、オブジェクトグラフのサイクルはJPA APIとは関係ありません。それはXMLだけです。 JPAタグを削除する –

答えて

1

あなたのBeanは互いに参照します:CategoryEntity.newsには、上記のCategroyEntityが含まれるプロパティカテゴリを持つNewsEntityが少なくとも1つ含まれています。これをXMLとして出力しようとすると、無限のサークルにつながります。あなたの「主要な」エンティティが何であるかに応じて、カテゴリーやニュースを@XmlTransientとしてマークする必要があります。

関連する問題