gpt4 book ai didi

mysql - AppEngine + DataNucleus RDBMS + JPA 2 项目在使用 @OneToMany 注释时抛出异常

转载 作者:行者123 更新时间:2023-11-30 00:45:37 29 4
gpt4 key购买 nike

实体类是使用 JPA 向导从现有 MySQL 数据库在 Eclipse 中创建的,但必须删除 @OneToMany 注释,因为这些错误在增强期间弹出(使用 DataNucleus Enhancer 版本 3.1.1)。

java.lang.RuntimeException: Unexpected exception
at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:76)
at com.google.appengine.tools.enhancer.Enhance.<init>(Enhance.java:71)
at com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74)
... 2 more
Caused by: java.lang.VerifyError: Expecting a stackmap frame at branch target 40
Exception Details:
Location:
cultivartehidroponia/Order.getOrderItems()Ljava/util/List; @4: ifnull
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: 2ab4 004a c600 242a b400 4a2a 07b9 006f
0000010: 0300 9a00 162a b400 4a2a 072a b601 0db9
0000020: 0098 0400 c001 0fb0 2ab6 0056 9900 2e2a
0000030: b400 5a05 32c0 005c 07b6 0079 9a00 1e2a
0000040: b400 5a06 32c0 005c 07b6 0079 9a00 0ebb
0000050: 007b 5913 0111 b700 80bf 2ab6 010d b0

at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
at java.lang.Class.getDeclaredMethods(Class.java:1855)
at org.datanucleus.metadata.annotations.AbstractAnnotationReader.getJavaBeanAccessorAnnotationsForClass(AbstractAnnotationReader.java:310)
at org.datanucleus.metadata.annotations.AbstractAnnotationReader.getMetaDataForClass(AbstractAnnotationReader.java:146)
at org.datanucleus.metadata.annotations.AnnotationManagerImpl.getMetaDataForClass(AnnotationManagerImpl.java:171)
at org.datanucleus.metadata.MetaDataManager.loadAnnotationsForClass(MetaDataManager.java:2650)
at org.datanucleus.metadata.MetaDataManager.loadClasses(MetaDataManager.java:496)
at org.datanucleus.enhancer.DataNucleusEnhancer.getFileMetadataForInput(DataNucleusEnhancer.java:734)
at org.datanucleus.enhancer.DataNucleusEnhancer.enhance(DataNucleusEnhancer.java:525)
at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1258)
... 7 more

我可以很好地使用实体,只是不需要映射字段。

为了绕过这个问题,我必须使用 transient 字段临时实现此功能,例如:

@Transient private List<ViewProduct> products;

并手动模拟 @OneToMany 功能:

public List<ViewProduct> getProducts() {
EntityManager em = EMF.get().createEntityManager();
EntityTransaction trans = em.getTransaction();
try {
trans.begin();
this.products = em.createNamedQuery("ViewProduct.findByProductTemplate", ViewProduct.class).setParameter("prodTemplateId", this.getProdTemplateId()).getResultList();
trans.commit();
}...

但这违背了拥有这个好功能的目的......;(也许是配置问题?但为什么其他的都可以,而这个却不行呢?有人有类似的错误吗?有什么建议吗?

提前致谢!!!

最佳答案

DataNucleus v3.1 不受支持/开发,并且已经有一段时间了。您应该使用 v3.2+,它至少修复了 JDK 1.7 增强功能。

关于mysql - AppEngine + DataNucleus RDBMS + JPA 2 项目在使用 @OneToMany 注释时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21386043/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com