【发布时间】:2014-03-07 17:37:05
【问题描述】:
我正在 JSF/Primefaces 和 Tomee/OpenJPA 下开发一个文件管理应用程序。 我遇到了一个让我抓狂的奇怪错误!
这是我的实体:
@Entity
public class MyBoxFile implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String name;
private String fileType;
@Lob
@Basic(fetch=FetchType.LAZY, optional=true)
@Column(nullable = true, length=2000000000)
private byte[] file;
@OneToOne(fetch=FetchType.EAGER)
private MyBoxUser owner;
@ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.EAGER)
@JoinColumn(name="PARENT_ID")
private MyBoxFile parent;
@OneToMany(mappedBy="parent", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List<MyBoxFile> childs = new LinkedList<>();
//Getters & Setters ..
}
它代表文件和目录(取决于fileType)。目录可以有子目录。
我正在从我的实体创建数据库。要检索数据库的所有目录,我使用以下代码:
public List<MyBoxFile> findAllUsersDirs(MyBoxUser owner) {
owner = em.find(MyBoxUser.class, owner.getLogin());
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<MyBoxFile> criteriaQuery = criteriaBuilder.createQuery(MyBoxFile.class);
Root<MyBoxFile> from = criteriaQuery.from(MyBoxFile.class);
criteriaQuery.where(
criteriaBuilder.and(
criteriaBuilder.equal(from.get(MyBoxFile_.owner), owner),
criteriaBuilder.equal(from.get(MyBoxFile_.fileType), "directory")
)
);
TypedQuery<MyBoxFile> typedQuery = em.createQuery(criteriaQuery);
return typedQuery.getResultList();
}
我的问题是,每当我超过一个目录的 1 个子目录时,我都会收到此错误:
The bean encountered a non-application exception; nested exception is: <openjpa-2.3.0-nonfinal-1540826-r422266:1542644 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
错误在return typedQuery.getResultList();行
坚持和合并工作得很好(我可以坚持一个孩子的孩子,在数据库中它看起来不错,但使用条件查询我得到错误)
有谁知道问题出在哪里? 谢谢(我真的快疯了!我尽力写出正确缩进的问题,如果看起来不好,请见谅)
【问题讨论】:
标签: jakarta-ee jpa primefaces openjpa apache-tomee