2011-01-27 5 views
2

Я получил следующее исключение, когда сортировал объекты комментариев для JSON: javax.xml.bind.JAXBException: класс javax.jdo.identity.LongIdentity или любой из его суперклассов известен этому контекст. на com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo (JAXBContextImpl.java:594) на com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType (XMLSerializer.java:648)JAXBException при сортировке класса с аннотациями JPA

Ниже приведено определение моего комментария, обратите внимание, что я смешивал аннотации JAXB (для сортировки) и JPA (для сохранения с GAE).

@Entity 
@XmlRootElement(name = "Comment") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Comment { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @XmlElement(name = "CommentId") 
    private Long commentId; 

    @Basic 
    @XmlElement(name = "Author") 
    private String author; 

... 
} 

Что я не понимаю, почему исключение имеет какое-то отношение к LongIdentity?

ответ

4

Попробуйте аннотировать свойства вместо полей. Реализация JPA, возможно, использовала манипуляцию с байтовым кодом для добавления поля типа LongIdentity.

+0

Дополнительная информация, это исключение произошло только после того, как я сохранил новый экземпляр комментария к GAE, и JAXB попытался собрать оставшийся комментарий JSON. Все в порядке, когда я возвращаю комментарии из репозитория и маршалла JSON. – blackbeam

+0

Пробовал ли вы помещать аннотации на объект вместо поля? –

+0

Привет, Блейз, да. Но на этот раз я не смог совершить транзакцию, получил org.datanucleus.transaction.NucleusTransactionException: транзакция не удалось выполнить. BTW, я переместил аннотации в getCommentId(). – blackbeam

2

Blaise действительно пролить свет на мой вопрос, проблема решена и вот измененный класс комментариев.

@Entity 
@XmlRootElement(name = "Comment") 
@XmlAccessorType(XmlAccessType.PROPERTY) 
public class Comment { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @XmlElement(name = "CommentId") 
    public Long getCommentId(); 

    @Basic 
    @XmlElement(name = "Author") 
    public String getAuthor(); 

... 
} 
Смежные вопросы