【发布时间】:2017-04-24 15:36:06
【问题描述】:
如何在没有所有子关联的情况下获得我想要的对象。
我有我的班级网站:
@Entity
@Table(name = "Sites")
public class Site {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "Id_Site", unique = true, nullable = false)
private long Id_Site;
private String ...;
private boolean ...;
private long ...;
private Date ...;
private Date ...;
private String ...;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<Sequence> sequences = new HashSet<>();
@ManyToOne
private ... ...;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<...> ... = new HashSet<>();
@ManyToOne
private ... ...;
public constructor...
public set..
public get..
}
我只需要一个 Site 对象,没有序列关联。
在我的序列表中,我有:
@Entity
@Table(name = "Sequences")
public class Sequence {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "Id_Sequence", unique = true, nullable = false)
private long Id_Sequence;
private Date ....;
private Date ....;
private String ....;
private String ....;
private String ....;
private int ....;
private int ....;
private double ....;
private double ....;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<TraceSequence> traceSequences = new HashSet<>();
@ManyToOne(cascade = CascadeType.ALL)
private Site site;
public constructor...
public set..
public get..
}
当我使用 FetchType.Lazy 并调用我的方法时:
@Override
public Site findSiteByName(String Name_Site) {
List<Site> sites = entityManager.createQuery("SELECT s FROM Site s").getResultList();
for (Site item : sites) {
if (item.getNom_Site().equals(Name_Site)) {
return item;
}
}
return null;
}
我收到此错误:
无法延迟初始化角色集合:xxx.xxx.xxx.xxx.xxx.site.Site.sequences,无法初始化代理 - 无会话
当我使用FetchType.EAGER 时,我不仅得到了一个Site 对象,还得到了所有序列对象,以及其他序列关联的所有对象。 (我知道这是正常反应。)
谁能知道为什么这种延迟初始化的尝试不起作用,请告诉我如何解决这个问题。
【问题讨论】:
-
你误会了。延迟加载 is 工作:这就是您收到错误的原因。稍后的一些代码会尝试访问惰性关联(例如 JSON 序列化程序)并且由于没有会话而无法加载。
标签: java hibernate jpa hql lazy-loading