Google app engine 使用JPA注释编组类时的JAXBEException

Google app engine 使用JPA注释编组类时的JAXBEException,google-app-engine,jpa,jaxb,Google App Engine,Jpa,Jaxb,将注释对象编组到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(XMLS

将注释对象编组到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)

下面是我的注释定义,请注意,我混合了JAXB注释(用于编组)和JPA注释(用于GAE的持久性)


我不明白为什么异常与持久性有关?

尝试注释属性而不是字段。JPA实现可能使用字节码操作来添加一个类型为longidenty的字段。

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();

...
}

另外,只有在我将一个新的注释实例持久化到GAE并且JAXB试图将持久化的注释打包到JSON之后,才会发生此异常。当我从存储库中检索注释并将其转换为JSON时,一切都正常。您是否尝试将注释放在属性上而不是字段上?嗨,Blaise,是的。但我这次提交事务失败,得到org.datanucleus.transaction.nucleustractionexception:transaction提交失败。顺便说一句,我将注释移动到getCommentId()。
@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();

...
}