Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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

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
Java 使用CriteriaBuilder的JPA左外部联接导致错误:不允许部分对象查询维护缓存或进行编辑_Java_Jpa_Eclipselink_Jpa 2.0_Criteria Api - Fatal编程技术网

Java 使用CriteriaBuilder的JPA左外部联接导致错误:不允许部分对象查询维护缓存或进行编辑

Java 使用CriteriaBuilder的JPA左外部联接导致错误:不允许部分对象查询维护缓存或进行编辑,java,jpa,eclipselink,jpa-2.0,criteria-api,Java,Jpa,Eclipselink,Jpa 2.0,Criteria Api,我有以下实体关系 产品 @Entity @Table(name="PRODUCTS") public class Product @Id @Column(name="product_id") private long productId; @ManyToOne @JoinColumn(name="EMP_NUMBER") private Employee employee3; .... .... 员工 @Entity @Table(name="EMPLOYEES") public cla

我有以下实体关系

产品

@Entity
@Table(name="PRODUCTS")
public class Product

@Id
@Column(name="product_id")
private long productId;

@ManyToOne
@JoinColumn(name="EMP_NUMBER")
private Employee employee3; 
....
....
员工

@Entity
@Table(name="EMPLOYEES")
public class Employee

@Id
@Column(name="EMP_NUMBER")
private String empNumber;

@Column(name="EMP_NAME")
private String employeeName;

@OneToMany(mappedBy="employee3")
private List<Product> Product3;

....
....

如何才能做到这一点并消除错误?

我已通过添加下面提到的行解决了问题,如果其他人遇到与上述问题相同的问题,可能会对他们有用

((org.eclipse.persistence.jpa.JpaQuery)query).getDatabaseQuery().dontMaintainCache();
提供了另一个更好的选择

感谢

根据,有两种方法可以创建不带参数的条件查询
createQuery(class)
createQuery()
。第一个方法创建一个CriteriaQuery,将结果强制转换为

这意味着要解决这个问题,您可以更改
CriteriaQuery cq=cb.createQuery(Product.class)
到这个
CriteriaQuery cq=cb.createQuery()

然后使用
迭代器
检索结果

Iterator products = query.getResultList().iterator();

就我而言,根据这一点: 当您应用multiselect并且在表示对象中没有具有选定参数的构造函数时,就会发生此问题

例如,如果你有

Select empNumber,employeeName from Employee
然后,在实体或表示对象中,您需要一个构造函数:

public Employee(int empNumber, StringemployeeName ){...}
要小心,因为参数的顺序很重要

Select empNumber,employeeName from Employee
public Employee(int empNumber, StringemployeeName ){...}