Google app engine 使用JPA注释编组类时的JAXBEException
将注释对象编组到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的持久性)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
我不明白为什么异常与持久性有关?尝试注释属性而不是字段。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();
...
}