我得到了以下实体:
@Entity
public class Month extends BaseEntity {
private int year;
private String month;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<Record> records;
}
BaseEntity
有一个ID,所以这里没问题。
记录看起来像这样:
@Entity
public class Record extends BaseEntity {
@Temporal(TemporalType.DATE)
private Date date = new Date();
@ElementCollection
@CollectionTable(name = "record_item")
private Map<Category, Item> items;
}
Item
和Category
只是带有标签(String)的普通实体。
所有实体都有构造函数,getter和setter!
我通过NamedQuery加载Month
,如果我想显示数据表(普通jsf)中的记录,我得到以下异常:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: de.financeme.model.MonthOverview.records, could not initialize proxy - no Session
at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:567)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:205)
at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:146)
at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:261)
at javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:109)
at javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:184)
at javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:219)
at javax.faces.model.ListDataModel.<init>(ListDataModel.java:78)
at javax.faces.component.UIData.getDataModel(UIData.java:1828)
at javax.faces.component.UIData.getRowCount(UIData.java:356)
我的目标是使用JPA“模拟”Java中的Excel数据结构,如下所示:
我正在获取如下所示的记录列表:
@Stateless
public class MonthOverviewService extends AbstractEntityService<MonthOverview> {
public MonthOverview findByMonthYear(String month, int year) {
TypedQuery<MonthOverview> query = getEm().createNamedQuery(MonthOverview.NQ_FIND_BY_MONTH_YEAR, MonthOverview.class);
query.setParameter("month", month);
query.setParameter("year", year);
return query.getResultList().get(0);
}
}
这只给我一个record
,但这些项目是PersistentBag
。
对于每个record
我想显示keySet
items
,如下所示:
#{record.items.keySet()}
出了什么问题?您是否有任何提示如何使用正确的映射?