上下文:使用play framework(1.3)、hibernate(4.3.8)和html端的一些Groovy开发内部web应用程序。
我目前正在使用Hibernate,我被指派去寻找一些优化技术。我们有一些加载问题,因为所有的东西都是懒洋洋地取来的,当我们试图用Groovy访问它时,Hibernate会像雨点一样大量地输入请求,这会耗费大量的时间,使我们的应用程序变得非常慢。
所以我正在尝试调整我们的find方法来获取我需要的所有东西,这样Hibernate就不必这样做了。
这是我的课:
@Entity @Table(name="business_partner", schema = "public") public class BusinessPartner extends Model{ @Id @Column(name="business_partner_id", updatable=false, nullable=false) @GeneratedValue(strategy=GenerationType.TABLE, generator="businessPartnerGenerator") @TableGenerator(name="businessPartnerGenerator", table="key_generator", pkColumnName="table_name", valueColumnName="next_id", allocationSize=1) private Integer businessPartnerId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "airline_id") @Unique private Airline airline; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "trader_country_id") private Country traderCountry; @Column(name = "name", nullable = false) @Required @MaxSize(50) @Unique private String name; @Column(name = "code", updatable = false) @MaxSize(5) @Unique private String code; @Column(name = "is_active", nullable = false) private Boolean isActive; @OneToMany(fetch = FetchType.LAZY, mappedBy="businessPartner", cascade=CascadeType.ALL) @Fetch(FetchMode.SUBSELECT) private List lstBusinessPartnerTypes = new ArrayList(); @OneToMany(fetch = FetchType.LAZY, mappedBy="businessPartner", cascade=CascadeType.ALL) @Fetch(FetchMode.SUBSELECT) private List lstBusinessPartnerAddresses = new ArrayList();
以下是我的标准:
public static List findAll(){ Session oSession = SessionManager.createSession(); List lstBusinessPartners = (List)oSession.createCriteria(BusinessPartner.class) .createAlias("lstBusinessPartnerAddresses", "lstBPA") .createAlias("lstBusinessPartnerTypes", "lstBPT") .setFetchMode("airline", FetchMode.JOIN) .setFetchMode("lstBPA.country", FetchMode.SELECT) .setFetchMode("lstBPT.typeBusinessPartner", FetchMode.SELECT) .addOrder(Order.asc("code")) .list(); SessionManager.closeSession(oSession); return lstBusinessPartners; }
所以我需要访问航空公司和一个孩子的每一个到许多列表。
我可以访问航空公司,那里没有问题。当我尝试访问列表中的对象时,它变得很棘手。我不能加载列表或它们的子列表(正如您可以从我的标准中看到的,我试图在一个列表中访问country,并在另一个列表中键入business partner)。我对每一个商业伙伴都有这样的要求:
Hibernate示例
所以我的问题是这样的:是否可以使用标准来获取一个惰性列表?如果是的话,该怎么做呢?
您可以使用Hibernate.initialize(Object)方法初始化每个集合。所以在DAO层中,只需要检索‘父’对象,然后为每个子对象调用此方法。
所以我找到了我的答案,如果有人在这个帖子上绊倒寻找答案。您需要为列表创建一个别名,并指定JoinType,如下所示:
BusinessPartner oBusinessPartner = (BusinessPartner)oSession.createCriteria(BusinessPartner.class, "BP")
.add(Restrictions.eq("businessPartnerId", iBusinessPartnerId))
.createAlias("lstBusinessPartnerTypes", "lstBPT", JoinType.LEFT_OUTER_JOIN)
.createAlias("lstBPT.typeBusinessPartner", "TBP", JoinType.LEFT_OUTER_JOIN)
.createAlias("lstBPT.accountGroup", "AG", JoinType.LEFT_OUTER_JOIN)
.createAlias("AG.typeBusinessPartner", "AGTBP", JoinType.LEFT_OUTER_JOIN)
.createAlias("lstBusinessPartnerAddresses", "lstBPA", JoinType.LEFT_OUTER_JOIN)
.createAlias("lstBPA.country", "BPAC", JoinType.LEFT_OUTER_JOIN)
.createAlias("lstBPA.language", "BPAL", JoinType.LEFT_OUTER_JOIN)
.uniqueResult();
这样不仅可以将转移页面的子元素放入数组,还可以将子元素的子元素放入数组。
实现一对多关系并选择父项和子项我有一个关系,我想进行查询(选择*) 文件夹。JAVA 作者。JAVA 我的请求: 我得到了这样的结果: 我的代码有什么问题?什么是问题,当我执行查询我得到了这个结果...我想得到这个结果
我有一个数据表的问题-懒加载。我认为问题是在IdiomasBean.java(TableBean.java),如果我把: 我得到了正确的数据表,但是<代码>按排序、筛选和不起作用。 我得到:java。lang.NullPointerException这里是堆栈跟踪: 下面是代码的其余部分: 指数xhtml diomasBean.java 懒散的数据模型。JAVA IdiomasBo.java 习语
本文向大家介绍groovy 懒惰的表达,包括了groovy 懒惰的表达的使用技巧和注意事项,需要的朋友参考一下 示例 我们可以在字符串中进行惰性插值。这与普通插值不同,因为每当将GString转换为String时,它可能具有不同的值(取决于闭包)。
描述 (Description) Lazy DynaBeans是DynaBean的一个实现,它提供了Lazy List和Lazy Map的特性,它连接了DynaClass的属性。 有两种类型的Lazy DynaBeans: LazyDynaBean :它指定惰性DynaBean,它提供名称和数据类型的动态修改属性。 LazyDynaMap :它通过使用惰性映射或列表系统,使DynaBean的轻量级
问题内容: 如果按以下方式实现单例, 此实现与延迟初始化方法有何不同?在这种情况下,实例将在加载类时创建,并且仅在第一次使用时才加载类本身(例如,Singleton.getInstance(),而当您声明实例Singleton singleton = null;时则不会)。 即使采用惰性初始化方法,该实例也是在对getInstance()的调用上创建的 我在这里想念什么吗? 问题答案: 您也可以调