0
我哈瓦两个表具有多对多关系:Apache OpenJPA开发 - NamedQuery异常
@Entity(name = "arelation")
@NamedQueries({ @NamedQuery(name = "arelation.findAByName", query = "SELECT a FROM arelation a WHERE a.arelationname = :aname"),
@NamedQuery(name = "arelation.findA", query = "SELECT a FROM arelation a WHERE a.arelationname = :aname and a.bList = :bList")
})
public class ABean{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotNull
private String arelationname;
@ManyToMany(targetEntity = BBean.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "joinAB", joinColumns = { @JoinColumn(name = "aID") }, inverseJoinColumns = { @JoinColumn(name = "bID") })
private List<BBean> bList= new ArrayList<BBean>();
.......
}
@Entity(name = "brelation")
@NamedQueries({ @NamedQuery(name = "brelation.findB", query = "SELECT b FROM brelation b WHERE b.brelationname = :bname)})
public class BBean{
/*
* private Bean Variables
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotNull
private String brelationname;
@ManyToMany(mappedBy = "bList")
@NotNull
private List<ABean> aList= new ArrayList<ABean>();
.......
}
不,我想找到一个ABean与NamedQuerd arelation.findA这样的:
public ABean findABean(EntityManager em, ABean a)
throws NoResultException {
return (ABean) em.createNamedQuery("arelation.findA")
.setParameter("aname", a.getArelationname())
.setParameter("blist", a..getBList())
.getSingleResult();
}
我设置bList包含来自数据库的持久对象。
但是,当我想找到“ABean”我得到以下异常:
java.lang.IllegalArgumentException: Parameter "Parameter<BBean>('blist')" declared in "SELECT a FROM arelation a WHERE a.arelationname = :aname and a.bList = :bList" is set to value of "[ ArelationName: name0
, ArelationName: name1
, ArelationName: name2
, ArelationName: name3
, ArelationName: name4
, ArelationName: name5
, ArelationName: name6
, ArelationName: name7
]" of type "org.apache.openjpa.util.java$util$ArrayList$proxy", but this parameter is bound to a field of type "mypackage.BBean"
是否有人知道为什么我得到这个例外? 我只想知道,如果这个名字和这个BBeans的ABean存在于数据库中。编辑: 好吧,我知道原因: 参数应该是一个BBean而不是它的列表 但是我怎样才能使用BBeans列表?
问候 Veote
嘿,谢谢你的回答,但我不能从一个bean选择 - >我得到一个ArgumentEception:异常在线程“主” org.apache.openjpa .persistence.ArgumentException:解析查询过滤器时发生错误“SELECT a FROM ABean a WHERE a.arelationname =:aname and a.bList =:bList”。错误消息:名称“ABean”不是公认的实体或标识符。也许你的意思是arelation,这是一个接近的匹配。已知实体名称:[arelation,brelation] –
veote
2012-03-07 06:40:38
您在@Entity注释中将实体名称从'ABean'更改为'arelation'。 – Rick 2012-03-07 13:47:45