我把毛巾扔了。我不明白,这有多困难?
我有两个实体User
和Group
具有多对多的关系。Group
管理关系。所以Group
我有:
@Entity
@Table(name = "GROUPS", catalog = "", schema = "GROUPADMIN")
public class Group {
...
@ManyToMany
@JoinTable(
name = "GROUP_USERS",
joinColumns = {@JoinColumn(name = "GROUP_ID")},
inverseJoinColumns = {@JoinColumn(name = "USER_ID")}
)
private Set<User> users;
然后为User
我创建实体,如下所示:
@Entity
@Table(name = "USERS", catalog = "", schema = "GROUPADMIN")
public class User {
...
@ManyToMany(mappedBy="users")
private Set<Group> groups;
然后,在我的后备bean(实际上是一个)中@Named("registry")
,我user
以相同的名称存储对检索到的引用作为属性。
然后我在我的JSF中皇家使用了那个支持bean
Hello <h:outputLabel value="#{registry.user.firstName}"/>
<h:panelGroup>
<h:dataTable value="#{registry.user.groups}" var="g">
<f:facet name="header">Properties List</f:facet>
<h:column>
<f:facet name="header">Group</f:facet>
<h:outputText value="#{g.id}"/>
</h:column>
</h:dataTable>
</h:panelGroup>
对于那些对表感兴趣的人:
create table "GROUPADMIN".GROUPS
(
ID VARCHAR(15) not null primary key
);
create table "GROUPADMIN".USERS
(
ID VARCHAR(50) not null primary key,
PASSWORD VARCHAR(50),
FIRST_NAME VARCHAR(50),
LAST_NAME VARCHAR(50)
);
create table "GROUPADMIN".GROUP_USERS
(
GROUP_ID VARCHAR(15) not null,
USER_ID VARCHAR(50) not null,
primary key (GROUP_ID, USER_ID)
);
注意到的第一件事是组似乎是空的,不是空的,而是空的(已通过调试等验证)。因此,我知道默认情况下a
@ManyToMany
将使用惰性绑定,因此我将其更改为fetch = FetchType.EAGER
(甚至不重要)。这样做之后,事情真的变得奇怪了…
此时,EL开始抱怨id属性不存在于"#{g.id}"
:
Caused by:
javax.el.PropertyNotFoundException - Property 'id' not found on type org.apache.openjpa.util.java$util$HashSet$proxy
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:266)
为什么要尝试id
在HashSet
代理而非代理上检索属性Group
?
所以我很好奇我实际上从那个g
属性中得到了什么<h:dataTable>
,我试图简单地使用<h:outputText value="#{g}"/>
… 输出它,结果真的很有趣…
什么g
打印出来并不仅仅是一个元件的Set<Group>
,但实际上是集合本身,它的前面显示异常匹配......这更表明了API或整合中的错误?
因此,基本上,看起来好像有几件事坏了,尽管我怀疑这都与一个问题相关。
请注意,我使用的是基本的现成TomEE,最新版本,没有自定义功能(也没有JPA的增强器)。
为何起作用:JSR 338:JavaTM Persistence 2.1。
提交的错误:Jira问题OpenJPA-2546(请投票解决此问题)。
解决方法:更换Set<T>
与List<T>
作为一种解决方法。
我在java应用程序中遇到以下异常。 我对entity表中的其他3个字段有一个唯一的约束,对attributes表中的name、Value有一个唯一的约束。当我尝试persist an实体(它有一组属性)时,repository.save()方法会失败,原因有两个:1。属性表中可能已经存在一个属性,由于唯一约束(这是我想要的。但我仍然想创建与实体的这些属性的关联)而无法插入2。实体可能已经存在,但
我在这里找到了一些关于这个主题的线索,但没有一个建议对我有效。 经过几天疯狂的谷歌搜索和测试,我被难倒了。如有任何帮助,不胜感激,谢谢。
我用tomee创建了一个项目,我想使用stomp协议在我的web应用程序和使用ActiveMQ作为MOM的客户端之间交换消息,但当我运行tomee时,会出现以下异常: 线程“ActiveMQ传输服务器线程处理程序中出现异常:stomp://0.0.0.0:61222“java.lang.NoClassDefFoundError:com/thoughtworks/xstream/io/Hierarc
我有两个多对多关系的实体。 在类角色中: java.lang.StackOverflowError:空 我该如何解决这个问题?我在Stackoverflow上看到了类似的问题,但我没有找到真正有效的解决方案。 Upd:抛出异常的位置:
在嵌入式TomEE容器中运行Arquillian测试时,我得到了以下错误
因此,我在一个控制器中有一个非常简单的代码片段,在这个代码片段中,我使用从外部文件中获取数据,它工作得很好!但是当我使用时,我会在控制台中得到一个