小编bit*_*tec的帖子

在JSF中使用JPA实体.哪个是防止LazyInitializationException的最佳策略?

希望听听有关从JSF UI编辑JPA实体的最佳实践的专家.

所以,关于这个问题的几句话.

想象一下,我有持久化对象MyEntity,我将其取出进行编辑.在DAO层我使用

return em.find(MyEntity.class, id);
Run Code Online (Sandbox Code Playgroud)

MyEntity在"父"实体上返回带有代理的实例 - 想象其中一个是MyParent.MyParent被提取为代理问候语@Access(AccessType.PROPERTY):

@Entity
public class MyParent {

    @Id
    @Access(AccessType.PROPERTY)    
    private Long id;
    //...
}
Run Code Online (Sandbox Code Playgroud)

和MyEntity有它的参考:

@ManyToOne(fetch = FetchType.LAZY)
@LazyToOne(LazyToOneOption.PROXY)
private MyParent myParent;
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.在UI中,我只是直接使用获取的对象而不创建任何值对象,并使用选择列表中的父对象:

<h:selectOneMenu value="#{myEntity.myParent.id}" id="office">
    <f:selectItems value="#{parents}"/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

一切都好,没有LazyInitializationException发生.但是当我保存对象时,我收到了

LazyInitializationException: could not initialize proxy - no Session
Run Code Online (Sandbox Code Playgroud)

MyParent代理setId()方法.

如果我改变MyParent关系,我可以轻松解决问题EAGER

@ManyToOne(fetch = FetchType.EAGER)
private MyParent myParent;
Run Code Online (Sandbox Code Playgroud)

或使用获取对象left join fetch p.myParent(实际上我现在这样做).在这种情况下,保存操作正常,并且关系MyParent透明地更改为新对象.不需要执行其他操作(手动复制,手动参考设置).非常简单方便. …

jsf hibernate jpa lazy-initialization

10
推荐指数
2
解决办法
4928
查看次数

Hibernate:如何自动在两列上映射java对象?

想象一下,我有一个共同的功能:一些文档的系列和数字(字符串和整数).我的对象(保险单)包含有关系列和不同文档数量的信息,所以我想将这个系列和数字组合成一个java对象,让hibernate在同一个表中的每个对象上存储两个字段.

看例子:

    class Polis {
        private DocInfo kaskoNumber;
        private DocInfo osagoNumber;
        private DocInfo tsNumber;
    }
    class DocInfo {
        private String series;
        private Integer number;
    }
    table:
    polis(kaskoSeries varchar2, 
          kaskoNumber numeric, 
          osagoSeries varchar2, 
          osagoNumber numeric..... )
Run Code Online (Sandbox Code Playgroud)

像这样的东西.我真正想做的是 - 摆脱Polis对象中的字段重复,并在DocInfo对象中封装系列和数字字段.这对于java来说没问题,但对于Hibernate来说,我知道的唯一方法是创建ManyToOne关系并将此信息移动到另一个表(doc_info).但我需要将所有信息保存在一个表格中!

谢谢.

types hibernate mappings

4
推荐指数
1
解决办法
8856
查看次数

标签 统计

hibernate ×2

jpa ×1

jsf ×1

lazy-initialization ×1

mappings ×1

types ×1