Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA异常-找不到<;的构造函数;类别>;带有参数类型;[class java.lang.String,class java.lang.String]“;填充数据_Jpa_Openjpa - Fatal编程技术网

JPA异常-找不到<;的构造函数;类别>;带有参数类型;[class java.lang.String,class java.lang.String]“;填充数据

JPA异常-找不到<;的构造函数;类别>;带有参数类型;[class java.lang.String,class java.lang.String]“;填充数据,jpa,openjpa,Jpa,Openjpa,我使用jBoss Fuse 6.1.0和blueprint DSL以及openJPA。我使用容器管理的事务(JTA)和由处理提交和回滚的方面管理的事务 我有以下属于JPA实体的类 @Entity @Table(name="CLIENT") @NamedQuery(name="Client.findAll", query="SELECT c FROM Client c") public class Client implements Serializable { private stati

我使用jBoss Fuse 6.1.0和blueprint DSL以及openJPA。我使用容器管理的事务(JTA)和由处理提交和回滚的方面管理的事务

我有以下属于JPA实体的类

@Entity
@Table(name="CLIENT")
@NamedQuery(name="Client.findAll", query="SELECT c FROM Client c")
public class Client implements Serializable {
    private static final long serialVersionUID = 1L;

    //Had to add this for avoiding exception. And it works as expected
    //Dummy constructor for JPA - Workaround
    public Client(String s1, String s2){}

    @Column(name="requestid", unique=true,nullable=false)
    private String requestId;

    @Id
    @Column(name="clientid", unique=true, nullable=false, length=128)
    private String clientId;


    @OneToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="REQUESTID", nullable=false)
    private RoccoRequest roccoRequest;

    //bi-directional One-To-Many association to ClientGroup
    @OneToMany(mappedBy="client",fetch=FetchType.LAZY)
    private List<ClientGroup> clientGroups;
....
,...
...
}


CriteriaQuery-CriteriaQuery=criteriaBuilder.createQuery(Client.class);
Root clientRoot=criteriaQuery.from(Client.class);
//将客户机表与RoccoRequest表连接起来
final Join clientRoccoJoin=clientRoot.Join(Client.roccoRequest,JoinType.INNER);
最终路径requestStatus=clientRoccoJoin.get(RoccoRequest_uquest.statusCode);
最终路径requestId=clientRoccoJoin.get(RoccoRequest_uquestid);
最终谓词crmIdPredicate=criteriaBuilder.equal(clientRoot.get(Client.crmId),crmId);
multiselect(_requestId,_requestStatus);
其中(_crmIdPredicate);
//获取请求类型为ACO的客户端现有请求的详细信息列表
clientDetails=entityManager.createQuery(criteriaQuery).getResultList();
if(null!=clientDetails)for(客户端clientDetail:clientDetails){
StatusBO statusDetails=新的StatusBO();
statusDetails.setCode((clientDetail.getRoccoRequest().getStatusCode());
PreInitiationBO preinitiateDetails=新的PreInitiationBO();
preinitiateDetails.getCaseHeader().setRequestId(requestId);
PreInitiatedDetails.setStatus(状态详细信息);
ExistingRequestInfo.add(预初始化详细信息);
}
我已经做了一些实体获取的标准。但我得到一个例外如下:

找不到具有的“class com.xxx.xxx.model.Client”的构造函数 参数类型“[class java.lang.String,class java.lang.String]”到 填充数据

为什么JPA需要一个参数构造函数?这和协会有关吗?我试着消除一对一的关系,但我还是犯了错误

请注意,我添加了一个对我来说毫无意义的2参数构造函数。但是如果它被给予的话,它是有效的。日志根级别已启用调试。它关于异常的信息非常少

请帮忙。

正如JBNizet所指出的, 我犯了一个愚蠢的错误,添加了带有两个字符串的multiselect,但是有一个Client.class类型的CrtieriaQuery

这可以通过删除multiselect(在我的情况下不是这样)或使用Tuples.class而不是Client.class创建CriteriaQuery和其他类型,并循环通过Tuples和get as tuple.get(0)等来解决


问题解决了。谢谢@Neil和@JBNizet

,当你得到它时,你正在执行什么操作?发布堆栈跟踪时出现任何异常都会暴露您正在做的事情。@Neil,谢谢您的回复。无法打印异常堆栈跟踪,尽管我尝试了打印。该应用程序有一个OSGi包,我已经启用了调试。我使用JPA筛选标准对join执行一次获取,该筛选标准在Client.class上运行,它给出了异常。org.apache.openjpa.persistence.ArgumentException下异常的调试跟踪:未能执行查询“null”。检查查询语法的正确性。有关详细信息,请参阅嵌套异常。因此,您执行了一个查询,但尚未告诉人们该查询是什么。那么祝你好运……哎呀。我真的想不起来,我在开会和深夜工作时,没有添加我想做的操作。很抱歉。我刚刚添加了导致此错误的条件。请查看详细信息。感谢您的时间和指点。您正在创建一个查询,该查询应该返回一个列表,但会对requestId和requestStatus进行多选。这就是为什么JPA试图用两个字符串作为参数来构造客户机。但这没有多大意义。该查询不应返回客户端。或者,如果它应该返回客户端,就不应该这样做。
@Entity
@Embeddable
@Table(name="CLIENTGROUP")
@NamedQuery(name="ClientGroup.findAll", query="SELECT c FROM ClientGroup c")
public class ClientGroup implements Serializable {
    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private ClientGroupPK id;

    @Column(length=32)
    private String type;

    @Column(name="clientid", length=128)
    private String clientId;

    //bi-directional many-to-one association to Client
    @ManyToOne(fetch=FetchType.EAGER)
    @MapsId("clientid")
    @JoinColumn(name="CLIENTID", nullable=true, insertable=false,  updatable=false)
    private Client client;
..
.
.
.
}
@Entity
@Table(name="ROCCOREQUEST")
@NamedQuery(name="RoccoRequest.CHECK_EXISISTING_CLIENT_DETAILS",
            query="SELECT r FROM RoccoRequest r JOIN r.client c WHERE c.crmId = :crmId")
public class RoccoRequest implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="requestid", unique=true, nullable=false, length=128)
    private String requestId;

@OneToOne(mappedBy="roccoRequest", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.REMOVE})
    private Client client;
..
..
..
CriteriaQuery<Client> criteriaQuery =  criteriaBuilder.createQuery(Client.class);
            Root<Client> clientRoot =  criteriaQuery.from(Client.class);
            //Join the Client table with the RoccoRequest table
            final Join<Client, RoccoRequest> clientRoccoJoin = clientRoot.join(Client_.roccoRequest,JoinType.INNER); 

            final Path<String> _requestStatus = clientRoccoJoin.get(RoccoRequest_.statusCode);
            final Path<String> _requestId = clientRoccoJoin.get(RoccoRequest_.requestId);

            final Predicate _crmIdPredicate = criteriaBuilder.equal(clientRoot.get(Client_.crmId), CRMId);

            criteriaQuery.multiselect(_requestId,_requestStatus);
            criteriaQuery.where(_crmIdPredicate);

            //Get list of details of existing requests for the client with the request type as ACO
            clientDetails = entityManager.createQuery(criteriaQuery).getResultList();

            if(null != clientDetails) for(Client clientDetail : clientDetails){
                StatusBO statusDetails = new StatusBO();
                    statusDetails.setCode((clientDetail.getRoccoRequest().getStatusCode()));
                PreInitiationBO preinitiateDetails = new PreInitiationBO();
                    preinitiateDetails.getCaseHeader().setRequestId(requestId);
                    preinitiateDetails.setStatus(statusDetails);
                exisitngRequestInfo.add(preinitiateDetails);    
            }