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/注释与架构匹配。还要确保你有正确的@Entity 和@Table 映射并指定了表名(确保你没有使用任何保留字作为表名)。

于 2012-10-29T12:34:42.110 回答
0

从日志中我们可以看到 hsqldb 中没有 Product 表。您是否使用休眠来创建架构。我在你的课上没有看到@Entity。如果你只是想得到产品的大小,你可以尝试使用@formula注解,它可以让你的域更多样本。

于 2012-10-29T12:35:04.853 回答