1

データベースに含まれるすべてのユーザーを表示するテーブルグリッドがあります。ユーザーは自分の製品のリストを持っています。同じテーブルグリッド内にも商品リストのサイズを表示したい。

私はここで何が間違っているのですか?

class User {
    String username;

    @OneToMany(mappedBy="user", cascade=CascadeType.ALL) 
    List<Product> products = new ArrayList<Product>();
}

class Product {
    @ManyToOne
    User user;
}

元:

 org.hibernate.exception.SQLGrammarException: could not initialize a collection: [User.products#1]

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.loader.Loader.loadCollection(Loader.java:2173)
    at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:62)
    at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:627)
    at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
    at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1863)
    at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:369)
    at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
    at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:134)
    at org.hibernate.collection.PersistentBag.size(PersistentBag.java:248)
    at UserPage.setupRender(UserPage.java:41)
    at UserPage.setupRender(UserPage.java)
    at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.invokeComponent(ComponentPageElementImpl.java:174)
    at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:133)
    ... 94 more

Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PRODUCT
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
    at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
    at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534)
    at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:452)
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1700)
    at org.hibernate.loader.Loader.doQuery(Loader.java:801)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
    at org.hibernate.loader.Loader.loadCollection(Loader.java:2166)
    ... 106 more
4

3 に答える 3

3

Userデータベースのキーワードです。Userエンティティ名を別の名前に変更してみてください(例UserProfile)。

また、両方のエンティティがにマッピングされていることを確認してくださいhibernate.cfg.xml

于 2012-10-29T12:34:09.267 に答える
0

これはさまざまな理由で発生する可能性があります。私が主に経験した一般的な理由は、列名が一致しないことです。マッピングxml/annotationsがスキーマと一致していることを確認してください。また、テーブル名が指定された適切な@Entityおよび@Tableマッピングがあることを確認してください(テーブル名に予約語を使用していないことを確認してください)。

于 2012-10-29T12:34:42.110 に答える
0

ログから、hsqldbにテーブルProductがないことがわかります。スキーマの作成にHibernateを使用していますか?クラスに@Entityが表示されませんでした。また、製品のサイズを取得したいだけの場合は、@ Formulaアノテーションを使用してみてください。これにより、ドメインのサンプル数を増やすことができます。

于 2012-10-29T12:35:04.853 に答える