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 ){...}