- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力解决发生在 JSF 验证阶段的问题,不知何故,验证正在做一些 hibernate 不喜欢的事情(未能懒惰地初始化集合,没有 session 或 session 被关闭),我想了解什么.
上下文是这样的:我有一张支票,它以多对多的关系链接到 CheckType。我正在编辑现有的支票(在该编辑页面中提供了许多组合框,以便我将其链接到特定的支票类型)。
我也在使用 Primefaces。
问题发生在验证过程结束时,但我的转换器工作正常(返回正确的结果)。
此外,我真正不明白的是为什么有一个懒惰的,而所有这些对象都以 EAGER 模式加载。
感谢您的洞察力,我对 hibernate 并将其链接到 JSF 还很陌生:/
堆栈跟踪
11:15:08,137 INFO [com.bdls.ids.utils.BDPhaseListener] (http-localhost-127.0.0.1-8080-3) Before PROCESS_VALIDATIONS 3
11:15:11,439 INFO [stdout] (http-localhost-127.0.0.1-8080-3) Hibernate:
11:15:11,440 INFO [stdout] (http-localhost-127.0.0.1-8080-3) select
11:15:11,486 INFO [stdout] (http-localhost-127.0.0.1-8080-3) Hibernate:
11:15:11,486 INFO [stdout] (http-localhost-127.0.0.1-8080-3) select
11:15:11,503 INFO [stdout] (http-localhost-127.0.0.1-8080-3) Hibernate:
11:15:11,504 INFO [stdout] (http-localhost-127.0.0.1-8080-3) select
11:15:12,942 INFO [stdout] (http-localhost-127.0.0.1-8080-3) Hibernate:
11:15:12,944 INFO [stdout] (http-localhost-127.0.0.1-8080-3) select
11:15:13,023 INFO [stdout] (http-localhost-127.0.0.1-8080-3) Hibernate:
11:15:13,023 INFO [stdout] (http-localhost-127.0.0.1-8080-3) select
11:15:13,040 INFO [stdout] (http-localhost-127.0.0.1-8080-3) Hibernate:
11:15:13,062 INFO [stdout] (http-localhost-127.0.0.1-8080-3) Hibernate:
11:15:13,856 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-localhost-127.0.0.1-8080-3) failed to lazily initialize a collection, no session or session was closed: org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:393) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:385) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:378) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.collection.internal.PersistentSet.add(PersistentSet.java:206) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValuesForModel(MenuRenderer.java:382) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValue(MenuRenderer.java:129) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:315) [jsf-impl-2.1.7-jbossorg-2.jar:]
at org.primefaces.component.selectmanycheckbox.SelectManyCheckboxRenderer.getConvertedValue(SelectManyCheckboxRenderer.java:36) [primefaces-3.4.2.jar:]
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIInput.validate(UIInput.java:960) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIInput.executeValidate(UIInput.java:1233) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIInput.processValidators(UIInput.java:698) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIForm.processValidators(UIForm.java:253) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) [primefaces-3.4.2.jar:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at com.bdls.ids.controller.login.NoCacheFilter.doFilter(NoCacheFilter.java:39) [classes:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at com.bdls.ids.controller.login.AuthenticationFilter.doFilter(AuthenticationFilter.java:48) [classes:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_32]
11:15:13,901 INFO [com.bdls.ids.utils.BDPhaseListener] (http-localhost-127.0.0.1-8080-3) After PROCESS_VALIDATIONS 3
<h:form id="new-items" prependId="false">
<label for="typechecks">Type of checks :</label>
<p:selectManyCheckbox id="typechecks" value="#{checksController.itemEdited.checkTypes}" layout="pageDirection" converter="checkTypeConverter">
<f:selectItems value="#{checkTypeController.allItems}" var="checkType" itemLabel="#{checkType.name}" />
</p:selectManyCheckbox>
<p:commandButton id="save" value="Save" action="#{checksController.persistItemEdited}" styleClass="btnFooterFormNewItems" icon="ui-icon-check" update="new-items" />
</h:form>
@FacesConverter("checkTypeConverter")
public class CheckTypeConverter implements Converter {
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null || value.toString().isEmpty()) {
return "";
}
return ((UnversionedObject) value).getId().toString();
}
public Object getAsObject(FacesContext context, UIComponent arg1, String value) {
CheckTypeService checkTypeService = FacesContextUtils.getWebApplicationContext(context).getBean("checkTypeService",
CheckTypeService.class);
return checkTypeService.getById(Integer.parseInt(value));
}
}
@ManagedBean
@ViewScoped
public class ChecksController implements Serializable {
private static Logger log = Logger.getLogger(ChecksController.class);
// -------------------------------------------------
// properties
// -------------------------------------------------
@ManagedProperty(value = "#{checksService}")
private ChecksService checksService;
// -------------------------------------------------
// parameters
// -------------------------------------------------
private List<Check> allChecks;
private Check[] selectedItem;
private Check itemEdited = new Check();
// -------------------------------------------------
// constructor
// -------------------------------------------------
public ChecksController() {
log.info("Creation of checks controller");
allChecks = new ArrayList<Check>();
}
// -------------------------------------------------
// methods
// -------------------------------------------------
@PostConstruct
private void load() {
if(FacesContext.getCurrentInstance().isPostback()) return;
log.info("loading list of checks...");
allChecks = checksService.getAll();
log.info(String.format("Loaded %s items", allChecks.size()));
}
public void delete(Check c)
{
try{
checksService.delete(c);
}catch(Exception e){
log.error("Error when deleting object "+c);
e.printStackTrace();
}
}
public void prefillFrom(String modelID) {
log.info("Pre-filling based on model " + modelID);
if (modelID == null) // new item
return;
// in this case, the item must exist (edition)
itemEdited = checksService.getById(Integer.parseInt(modelID));
if (itemEdited == null) {
UINotification.sendAsError("Item does not exist", String.format("The item %s does not exist", modelID));
log.error(String.format("The item %s does not exist", modelID));
}
}
public void persistItemEdited(){
log.info("persisting item edited...");
// CheckType c = new CheckType();
// c.setName("jolitest");
//
// itemEdited.getCheckTypes().add(c);
// c.getChecks().add(itemEdited);
//
try{
checksService.saveOrUpdate(itemEdited);
}catch(Exception e){
log.error("Error when saving object "+itemEdited);
e.printStackTrace();
}
itemEdited = new Check() ;
}
public void test()
{
CheckType ct = new CheckType();
ct.setName("toto");
itemEdited.getCheckTypes().add(ct);
Set<CheckType> set = new HashSet<CheckType>();
set.add(ct);
itemEdited.setCheckTypes(set);
}
getters and setters...
@Service("checksService")
@Transactional(readOnly = true)
public class ChecksServiceImpl implements ChecksService {
@Autowired
CheckDAO checkDAO;
@Autowired
CheckTypeDAO checkTypeDAO;
/**
* retrieves a UnversionedObject based on its id
*/
public Check getById(Integer id) {
return checkDAO.getById(id);
}
@Transactional(readOnly = false)
public Check saveOrUpdate(Check c) {
//for many-to-many relations, re-attach the entities
if (c.getCheckTypes() != null && c.getCheckTypes().size() > 0)
{
List<CheckType> checkTypes = new ArrayList<CheckType>(c.getCheckTypes().size());
for (CheckType ct : c.getCheckTypes()) {
checkTypes.add(checkTypeDAO.getById(ct.getId()));
}
c.getCheckTypes().clear();
c.getCheckTypes().addAll(checkTypes);
}
return checkDAO.saveOrUpdateDetached(c);
}
/**
* returns a list of all checks
*/
@Override
public List<Check> getAll() {
List<Check> list = checkDAO.getAll();
return list;
}
/**
* empty the extra relations and deletes the object
*/
@Override
@Transactional(readOnly = false)
public void delete(Check c) {
// attach object
c = checkDAO.getById(c.getId());
// initialize list
Hibernate.initialize(c.getCheckTypes());
// first remove relations to checktype
c.getCheckTypes().clear();
// update
checkDAO.saveOrUpdateDetached(c);
// now delete
checkDAO.delete(c);
}
}
@Repository
public class CheckDAOImpl extends BaseDAOimpl<Check> implements CheckDAO {
}
public abstract class BaseDAOimpl<T extends UnversionedObject> implements BaseDAO<T> {
@Override
public T saveOrUpdateDetached(T object) throws DataModelConsistencyException {
updateUserAndTime(object);
if (object.getId() != null) {
return _entityManager.merge(object);
} else {
_entityManager.persist(object);
return object;
}
}
rest omitted
}
@Entity
@Table(name = "IDS_SV_CHECK")
public class Check extends UnversionedObject {
public static enum Severity {
HIGH, MEDIUM, LOW, INFORMATIVE
};
@Column(length = 32)
private String checkName;
@Column
private Integer subCheckID;
@Enumerated(EnumType.STRING)
private Severity severity;
@Column(length = 32)
private String description;
@Column(length = 32)
private String errorMsg;
@Column(length = 32)
private String DMVersion;
@Column(length = 32)
private String therapeuticArea;
@ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name = "IDS_SV_CHECK_HAS_TYPE",
joinColumns={@JoinColumn(name="check_id")},
inverseJoinColumns={@JoinColumn(name="checktype_id")})
@BatchSize(size = 100)
private Set<CheckType> checkTypes = new HashSet<CheckType>();
...
@Entity
@Table(name = "IDS_SV_CHECKTYPE")
public class CheckType extends UnversionedObject {
@Column(length=60)
private String name;
@ManyToMany(mappedBy="checkTypes",fetch=FetchType.EAGER)
private Set<Check> checks = new HashSet<Check>();
最佳答案
现在回复已经很晚了,但我认为最好在此处留下另一种解决方案的踪迹。
我遇到了同样的问题,在网上冲浪时我偶然发现了这个:
http://zenidas.wordpress.com/recipes/avoiding-lazyinitializationexception-on-jsf-selectmanymenu/
为我的具有 ManyToMany 属性的实体尝试了此解决方案,它的效果非常好。
斯特凡诺
关于hibernate - primefaces jsf hibernate - 在验证阶段 : failed to lazily initialize a collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15496943/
是否有带有索引的.collect?我想做这样的事情: def myList = [ [position: 0, name: 'Bob'], [position: 0, name: 'J
我创建了一个 Collection 类,它扩展了 ArrayList 以添加一些有用的方法。它看起来像这样: public class Collection extends ArrayList {
我知道如果我有元素,我想得到 List/Set/Map 我可以调用这个元素: Collections.singleton()/Collections.singletonList()/Collectio
我刚刚在我的 pom 文件中看到 Apache commons-collections 有两个不同的组 ID: commons-collections commons-collect
我们可以对所有 Collections 类型的对象(如 Set 和 List)使用 Collections.synchronizedCollection(Collection c),这就是为什么我们有
我有List>我想让它把上一个集合中的所有人复制到List收藏。 我是这样做的: var People = new List>{ new List{...},... };
我想做的是使用良好的旧循环非常简单。 假设我有一个包含 B 列表的对象 A。 public class A { public List myListOfB; } 在其他一些方法中,我有一个 As
在 Capgemini 的采访中,我被问到一个我无法回答的问题。所有集合类和接口(interface)共有的那些方法是什么? 最佳答案 所有 java 对象类(包括所有集合)都派生自名为 Object
我有一系列存储估计信息的数据库表。当设置某些边界时,我试图从所有数据库表中返回所有数据。 收藏 $estimateItems = new Collection(); $esti
为什么 Haskell 实现如此专注于链表? 例如,我知道 Data.Sequence 效率更高 大多数列表操作(cons 操作除外),并且被大量使用; 但是,从语法上讲,它“几乎不受支持”。 Has
我试图简单地将我在 PHP 中请求的内容返回到 JSON。我的问题是每个库存尚未完成。事实上,它是“渲染”,但“this.collection.models”尚未完成,因为请求尚未完成。 我应该如何解
本质上,作为Powershell脚本的一部分,我需要实现广度优先搜索。因此,我需要队列,并且认为System.Collections.Queue与其他任何队列一样好。但是,当我从队列中取出一个对象时,
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是 on-topic用于堆栈溢出。 已关闭10 年前。 Improve t
嗨,我不明白为什么这不起作用? Notifications.update({'userId':Meteor.userId(), 'notifyUserId':notifyFriendId}, {$se
假设我有一个闭包: def increment = {value, step -> value + step } 现在我想遍历我的整数集合的每个项目,用 5 递增,并将新元素保存到一个新集合中:
使用逐页 View 时,我的 plone 集合文件夹未显示所有项目。基本上我有 9 页包含元素,但第 6 - 8 页显示的内容完全相同。因此,并非所有项目都会显示,即使项目总数对应于应该在集合中的元素
private Map> map ,其中 ProgramCourse 是我的项目中的域类,上面的 map 是我运行项目时域类 Program 的字段以下异常即将到来。 Use of @OneToMan
三者的主要区别是什么?现在,我想分别使用字符串/字符串创建一个键/值对。这三个似乎都有我可以使用的选项。 编辑:我只想创建一个简单的哈希表 - 没什么特别复杂的。 最佳答案 通用集合几乎完全取代了基础
我正在为 NodeJs 使用 mongodb 驱动程序,其中有 3 个方法: 1) db.collection.insert 2) 数据库.collection.insertOne 3) db.col
我有一个集合,我正在尝试使用 Distinct 方法删除重复项。 public static Collection imagePlaylist imagePlaylist = imagePlaylis
我是一名优秀的程序员,十分优秀!