I use a framework called "Cuba.Studio" to create a CRUD application.
When I use this JPQL Query, I get this exception:
Error com.haulmont.cuba.core.global.RemoteException: MetaClass not
found for firstusecase$FIRSTUSECASE_USE_CASE_PROJECT_LINK
this is my code:
try (Transaction tx = persistence.createTransaction()) {
EntityManager em = persistence.getEntityManager();
Query query = em.createQuery("select firstusecase$Project.name from
firstusecase$UseCase useCase,
firstusecase$FIRSTUSECASE_USE_CASE_PROJECT_LINK commonTable,
firstusecase$Project project where useCase.id = commonTable.use_case_id
and project.id = commonTable.project_id and useCase.id = :useCaseId")
.setParameter("useCaseId", useCase.getId());
and here is a part of the code of my Entity Class:
@JoinTable(name = "FIRSTUSECASE_USE_CASE_PROJECT_LINK",
joinColumns = @JoinColumn(name = "USE_CASE_ID"),
inverseJoinColumns = @JoinColumn(name = "PROJECT_ID"))
@ManyToMany
protected Collection<Project> project;
Does anybody have an idea? I would be very thankful about your support :)
Thanks
EDIT: Here is the code of the UseCase Class
package com.company.firstusecase.entity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Collection;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import com.haulmont.cuba.core.entity.StandardEntity;
import javax.persistence.Column;
import com.haulmont.chile.core.annotations.NamePattern;
import javax.persistence.Lob;
import com.haulmont.chile.core.annotations.MetaProperty;
import javax.persistence.Transient;
@NamePattern("%s|jamaref")
@Table(name = "FIRSTUSECASE_USE_CASE")
@Entity(name = "firstusecase$UseCase")
public class UseCase extends StandardEntity {
private static final long serialVersionUID = 4928397068727365740L;
@Column(name = "JAMAREF", length = 30)
protected String jamaref;
@Column(name = "PROJECT_LIST")
protected String projectList;
@Transient
@MetaProperty
protected String usecaseDescription;
@Column(name = "CHANGE_TRACKING_COMMENT")
protected String changeTrackingComment;
@Lob
@Column(name = "CHANGE_TRACKING")
protected String changeTracking;
@Column(name = "POWERAMSREF", length = 30)
protected String poweramsref;
@Column(name = "LEGACYPWRUC", length = 30)
protected String legacypwruc;
@Column(name = "TRACKING_CHANGE_COMMENT")
protected String trackingChangeComment;
@Column(name = "INSERT_TIMESTAMP")
protected String insertTimestamp;
@Column(name = "USECASE_TYPE")
protected String usecaseType;
@Column(name = "CHANGE_TIMESTAMP")
protected String changeTimestamp;
@JoinTable(name = "FIRSTUSECASE_USE_CASE_PROJECT_LINK",
joinColumns = @JoinColumn(name = "USE_CASE_ID"),
inverseJoinColumns = @JoinColumn(name = "PROJECT_ID"))
@ManyToMany
protected Collection<Project> project;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "USECASE_STATUS_ID")
protected UseCaseStatus usecaseStatus;
public void setProjectList(String projectList) {
this.projectList = projectList;
}
public String getProjectList() {
return projectList;
}
public String getUsecaseDescription() {
return usecaseDescription;
}
public void setChangeTrackingComment(String changeTrackingComment) {
this.changeTrackingComment = changeTrackingComment;
}
public String getChangeTrackingComment() {
return changeTrackingComment;
}
public void setChangeTracking(String changeTracking) {
this.changeTracking = changeTracking;
}
public void setInsertTimestamp(String insertTimestamp) {
this.insertTimestamp = insertTimestamp;
}
public void setChangeTimestamp(String changeTimestamp) {
this.changeTimestamp = changeTimestamp;
}
public String getInsertTimestamp() {
return insertTimestamp;
}
public void setUsecaseType(String usecaseType) {
this.usecaseType = usecaseType;
}
public String getUsecaseType() {
return usecaseType;
}
public String getChangeTimestamp() {
return changeTimestamp;
}
public String getChangeTracking() {
return changeTracking;
}
public void setTrackingChangeComment(String trackingChangeComment) {
this.trackingChangeComment = trackingChangeComment;
}
public String getTrackingChangeComment() {
return trackingChangeComment;
}
public void setUsecaseStatus(UseCaseStatus usecaseStatus) {
this.usecaseStatus = usecaseStatus;
}
public UseCaseStatus getUsecaseStatus() {
return usecaseStatus;
}
public void setJamaref(String jamaref) {
this.jamaref = jamaref;
}
public String getJamaref() {
return jamaref;
}
public void setPoweramsref(String poweramsref) {
this.poweramsref = poweramsref;
}
public String getPoweramsref() {
return poweramsref;
}
public void setLegacypwruc(String legacypwruc) {
this.legacypwruc = legacypwruc;
}
public String getLegacypwruc() {
return legacypwruc;
}
public void setProject(Collection<Project> project) {
this.project = project;
}
public Collection<Project> getProject() {
return project;
}
}
And the code of the Project.class
package com.company.firstusecase.entity;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Column;
import com.haulmont.cuba.core.entity.StandardEntity;
import com.haulmont.chile.core.annotations.NamePattern;
@NamePattern("%s|name")
@Table(name = "FIRSTUSECASE_PROJECT")
@Entity(name = "firstusecase$Project")
public class Project extends StandardEntity {
private static final long serialVersionUID = -3997556855391197754L;
@Column(name = "NAME", nullable = false)
protected String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Thanks