2

datanucleus jdo(およびデータストアとしてのneodatis)を使用して、いくつかの基本的な永続クラスを作成しようとしていました。

次の 3 つのクラスがあります (チュートリアルからコピー)

在庫.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.

原因が分からないのですが、どなたかヒントをいただけないでしょうか?

4

3 に答える 3

0

エンハンサーが Eclipse でファイルを保存するときに実行される場合は、Eclipse コンソールでエンハンスが実行されるかどうかを確認してください。Eclipse のインストールで、ときどきクラスを拡張するのを忘れていることに気付きました。忘れると、拡張されていない GAE にクラスをデプロイします。Eclipse を再起動するだけでうまくいきます。

于 2015-08-06T02:34:46.437 に答える
-1

それを試してみてください:

@Entity // use this annotation 
public class MyClass
{
@Id
long id;

@Basic
@Convert(converter=URLStringConverter.class)
URL url;
于 2013-01-30T23:44:14.753 に答える