Java ApacheOpenJPA-NamedQuery异常

Java ApacheOpenJPA-NamedQuery异常,java,exception,jpa-2.0,openjpa,Java,Exception,Jpa 2.0,Openjpa,我有两个表,它们之间有很多关系: @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

我有两个表,它们之间有很多关系:

@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>();

        .......
}
我使用数据库中的持久化对象设置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"
java.lang.IllegalArgumentException:Parameter“Parameter('blist')”在“从关系a中选择a,其中a.arelationname=:aname和a.blist=:blist”设置为“[arelationname:name0”的值”中声明
,ArelationName:name1
,ArelationName:name2
,ArelationName:name3
,A关系名称:名称4
,A关系名称:名称5
,A关系名称:名称6
,ArelationName:name7
]类型为“org.apache.openjpa.util.java$util$ArrayList$proxy”,但此参数绑定到类型为“mypackage.BBean”的字段
有人知道我为什么会得到这个例外吗? 我只想知道,DB中是否存在具有此名称和此BBean的ABean

编辑: 好的,我知道原因: 参数应该是BBean,而不是它的列表。 但是我如何使用BBean列表呢

致意
Veote

在命名查询中,当尝试引用表时,应使用类名,尝试使用此

@NamedQueries({ @NamedQuery(name = "brelation.findB", query = "SELECT b FROM BBean b WHERE b.brelationname = :bname)})
第二个是你不需要创建新的对象, 让它停留在
列表列表列表中


希望这能对您有所帮助。

嘿,谢谢您的回答,但我无法从bean中选择->我在线程“main”org.apache.openjpa.persistence.ArgumentException中获得参数选项:异常:解析查询筛选器“从a中选择a,其中a.arelationname=:aname和a.bList=:bList”时出错。错误消息:名称“ABean”不是可识别的实体或标识符。也许你指的是关系,这是一场势均力敌的比赛。已知实体名称:[arelation,brelation]您在@entity注释中将实体名称从'ABean'更改为'arelation'。
@NamedQueries({ @NamedQuery(name = "brelation.findB", query = "SELECT b FROM BBean b WHERE b.brelationname = :bname)})