Java 是否在对象的同一个表中显示OneToMany列表的大小?

Java 是否在对象的同一个表中显示OneToMany列表的大小?,java,sql,hibernate,jakarta-ee,one-to-many,Java,Sql,Hibernate,Jakarta Ee,One To Many,我有一个表格网格,它显示数据库中包含的所有用户。 用户拥有自己的产品列表。我想在同一表格网格中显示产品列表的大小 我做错了什么 class User { String username; @OneToMany(mappedBy="user", cascade=CascadeType.ALL) List<Product> products = new ArrayList<Product>(); } class Product { @Ma

我有一个表格网格,它显示数据库中包含的所有用户。 用户拥有自己的产品列表。我想在同一表格网格中显示产品列表的大小

我做错了什么

class User {
    String username;

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

class Product {
    @ManyToOne
    User user;
}
类用户{
字符串用户名;
@OneToMany(mappedBy=“user”,cascade=CascadeType.ALL)
列表产品=新的ArrayList();
}
类产品{
@许多酮
用户;
}
例:

org.hibernate.exception.sqlgrammareexception:无法初始化集合:[User.products#1]
位于org.hibernate.exception.sqlstatecoverter.convert(sqlstatecoverter.java:92)
位于org.hibernate.exception.jdbceptionhelper.convert(jdbceptionhelper.java:66)
位于org.hibernate.loader.loader.loadCollection(loader.java:2173)
位于org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:62)
位于org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:627)
位于org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
位于org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1863)
位于org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:369)
位于org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
位于org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:134)
位于org.hibernate.collection.PersistentBag.size(PersistentBag.java:248)
在UserPage.setupRender(UserPage.java:41)
在UserPage.setupRender(UserPage.java)中
位于org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPase.invokeComponent(ComponentPageElementImpl.java:174)
位于org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:133)
... 94多
原因:java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:产品
位于org.hsqldb.jdbc.Util.sqlException(未知源)
位于org.hsqldb.jdbc.Util.sqlException(未知源)
位于org.hsqldb.jdbc.JDBCPreparedStatement。(来源未知)
位于org.hsqldb.jdbc.JDBCConnection.prepareStatement(未知源)
位于org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534)
位于org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:452)
位于org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
位于org.hibernate.loader.loader.prepareQueryStatement(loader.java:1700)
位于org.hibernate.loader.loader.doQuery(loader.java:801)
在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:274)上
位于org.hibernate.loader.loader.loadCollection(loader.java:2166)
... 106多

用户
是数据库的关键字。尝试将
User
实体名称更改为其他名称(例如
UserProfile


还要检查您的两个实体是否都映射到了
hibernate.cfg.xml

中。这可能是由于多种原因造成的。我经常遇到的常见原因是列名不匹配。确保映射xml/注释与模式匹配。另外,请确保指定了表名的@Entity和@Table映射是正确的(请确保没有为表名使用任何保留字)

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

在我看来,您的数据库中似乎不存在产品。如果它不存在,那么大小应该是0?我的意思是表不存在。Hibernate不会对此做出很好的响应。这才是真正的问题所在。我还有另一个名为“order”的类,我还必须重命名它。现在它工作了!
 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