【发布时间】:2013-01-30 23:29:03
【问题描述】:
我试图用 datanucleus jdo(和 neodatis 作为数据存储)制作一些基本的持久类。
我有以下三个课程(从教程中复制)
inventory.java
@PersistenceCapable
public class Inventory {
@PrimaryKey
String name = null;
Set<Product> products = new HashSet();
public Inventory(String name)
{
this.name = name;}
public Set<Product> getProducts() {return products;}
}
产品.java
@PersistenceCapable
public class Product {
@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.INCREMENT)
long id;
String name = null;
String description = null;
double price = 0.0;
public Product(String name, String desc, double price)
{
this.name = name;
this.description = desc;
this.price = price;}
}
和 book.java
@PersistenceCapable
public class Book extends Product {
String author=null;
String isbn=null;
String publisher=null;
public Book(String name, String desc, double price, String author,
String isbn, String publisher)
{
super(name,desc,price);
this.author = author;
this.isbn = isbn;
this.publisher = publisher;
}
}
自从我在构建项目时得到这个:
(...)
gen 31, 2013 12:10:14 AM org.datanucleus.enhancer.DataNucleusEnhancer main
INFO: DataNucleus Enhancer (version 3.2.0.m2) for API "JDO" using JRE "1.7"
ENHANCED (PersistenceCapable) : minchiabbasta.Book
ENHANCED (PersistenceCapable) : minchiabbasta.Inventory
ENHANCED (PersistenceCapable) : minchiabbasta.Product
(...)
但是
在运行应用程序时,持久性管理器会很好地启动,但是当它尝试使某些东西持久化时,会抛出此异常
org.datanucleus.api.jdo.exceptions.ClassNotPersistenceCapableException: The class
"minchiabbasta.Inventory" is not persistable. This means that it either hasnt been
enhanced, or that the enhanced version of the file is not in the CLASSPATH (or is
hidden by an unenhanced version), or the Meta-Data/annotations for the class are not
found.
我不知道为什么,谁能给我一个提示?
【问题讨论】:
-
该消息列出了 3 个可能的原因,因此请检查这 3 个事项。
-
@DataNucleus 我不是那么愚蠢的,我当然检查过这三件事,特别是 1. 课程没有得到增强:enhangher log 另有说明 2. the增强的类是隐藏的:jar 中只有一个版本的类,它是增强的一个(增强器写的那个)。 3. 没有找到注解:只看源文件,注解在他们应该在的地方。然而它给了我那个错误......
-
谁提到了“愚蠢”?我建议你看看这三件事,因为这是最常见的三件事。增强器增强了类是的,但是在运行时 CLASSPATH 中的增强类是吗?字节码反编译器将确认该类是否得到增强,就像在相关类上运行“javap”一样。您还可以轻松地打印出该异常的堆栈跟踪。这给出了错误来自的源点,以及为什么认为该类是不可持久的;你还没有提供。
-
(可免费下载的)DataNucleus 教程提供了适用于 Ant 和 Maven 的构建文件,它们也可以工作,如果遇到问题,您可以轻松地从这些文件开始,找出问题所在
-
实际上没有人,我在那儿开枪了,对不起。但是我在 Inventory 类上运行了 javap: 编译自“Inventory.java” public class minchiabbasta.Inventory { java.lang.String name; java.util.Set
产品;公共 minchiabbasta.Inventory(java.lang.String); public java.util.Set getProducts(); } 并且似乎只有普通类...奇怪,因为它是增强器编写的文件...
标签: java netbeans jdo datanucleus