有没有办法使用linq for nhibernate将fetchmode设置为渴望多个对象.似乎有一种扩展方法,它只允许我设置一个对象.但是我需要为多个对象设置它.这可能吗?谢谢
我有一个ETL过程涉及一个大量使用SELECT INTO语句的存储过程(最少记录,因此生成较少的日志流量,因此更快).在一个特定存储的存储过程中发生的一批工作中,几个最昂贵的操作是急切的线程,它们似乎只是缓冲查询结果,然后将它们复制到正在制作的表中.
热门线轴上的MSDN文档非常稀少.有没有人更深入地了解这些是否真的有必要(以及在什么情况下)?我有一些理论可能有意义,也可能没有意义,但没有成功从查询中消除这些理论.
.sqlplan文件非常大(160kb)所以我想将它们直接发布到论坛可能是不合理的.
所以,这里有一些可能适合特定答案的理论:
可以LAZY使用HQL 覆盖LEFT JOIN FETCH.
FROM Obj AS obj LEFT JOIN FETCH obj.otherObj WHERE obj.id = :id
Run Code Online (Sandbox Code Playgroud)
是否也可以覆盖EAGER?怎么样?
我有一个生成器函数,如下所示:
def mygenerator():
next_value = compute_first_value() # Costly operation
while next_value != terminating_value:
yield next_value
next_value = compute_next_value()
Run Code Online (Sandbox Code Playgroud)
我希望初始化步骤(在while循环之前)在调用函数时立即运行,而不是仅在首次使用生成器时运行.有什么好办法呢?
我想这样做,因为生成器将在一个单独的线程(或进程,或任何多处理使用)中运行,我将不会在短时间内使用返回,并且初始化有点昂贵,所以我希望它我正准备使用这些值时进行初始化.
我有一些麻烦,了解Guice的单例实例化是如何工作的.我已经阅读了可用的文档(此处为http://code.google.com/p/google-guice/wiki/Scopes),但我仍然无法弄清楚一些事情:
1)我已经将Guice与Tomcat集成在一起,我在ServletModule中设置了一些绑定:
bind(MyServlet.class).asEagerSingleton();
serve("myUrl").with(MyServlet.class);
serve("myOtherUrl").with(MyOtherServlet.class);
Run Code Online (Sandbox Code Playgroud)
(其中MyOtherServlet类上面有一个@Singleton注释)我的意图是有两个servlet,其中一个是急切实例化的,而另一个则不是.然而,似乎"serve ... with ..."行自动实例化servlet对象,即使该类未被绑定为急切的单例.我上面提到的链接提到了在Stage.Development和Stage.Production下运行的Guice之间的区别 - 但是即使我明确地使用了Stage.Development(无论如何都是默认的),这仍然会发生.有什么方法可以避免这种情况吗?
2)(继续1)尝试确保MyServlet首先被实例化,即使所有servlet现在急切地实例化,我在创建Injector时修改了模块(和绑定语句)的顺序,以便首先显示MyServlet的绑定.但是,我发现它仍然比其他一些绑定(非servlet类)实例化,其形式如下:
bind(MyInterface.class).to(MyClass.class).asEagerSingleton()
Run Code Online (Sandbox Code Playgroud)
即使这些其他绑定稍后出现在modules/bindings顺序中.我调查了一下,发现Guice只是实例化了那些受"bind ... to ... asEagerSingleton()"形式约束的热切单体,然后再进行"bind ... asEagerSingleton()",所以我通过修改行来解决它:bind(MyServlet.class).asEagerSingleton(); into:bind(MyServletDummyInterface.class).to(MyServlet.class).asEagerSingleton()
这实际上有效.不过,我宁愿避免使用虚拟接口来解决这个问题,所以我想知道是否有人有更好的解决方案..?
3)我有两个Guice模块 - 一个ServletModule和一个AbstractModule.ServletModule configureServlets()中包含以下绑定:
serve("aUrl").with(SomeServlet.class);
Run Code Online (Sandbox Code Playgroud)
AbstractModule的configure()具有以下绑定:
bind(SomeImpl.class).asEagerSingleton();
bind(SomeInterface.class).to(SomeImpl.class).in(Singleton.class);
Run Code Online (Sandbox Code Playgroud)
此外,SomeServlet类具有SomeInterface类型的注入字段,并且在类的顶部具有@Singleton注释.
现在,可以预期在创建注入器时,SomeImpl类将被实例化,并且相同的实例将被注入SomeServlet实例.如前所述,带有"serve ... with ..."语句的servlet似乎也得到了热切的实例化,但无论哪种方式,都应该只有一个SomeImpl对象被实例化.但由于某种原因,我在执行此操作时实例化了两个SomeImpl对象.为了解决这个问题,我在configure()中混合了两行,而不是上面的代码,我有以下几行:
bind(SomeImpl.class).in(Singleton.class)
bind(SomeInterface.class).to(SomeImpl.class).asEagerSingleton();
Run Code Online (Sandbox Code Playgroud)
然后它工作正常,我只有一个实例化SomeImpl的实例.我真的不明白为什么开关应该重要 - 我可以看到后一种方式是如何"更好",但我希望两者都能正常工作,所以我只是想知道我是否在这里弄错了.. ?
抱歉长度,
谢谢你的帮助!
Github链接到tensorflow中新引入的Eager模块:https : //github.com/tensorflow/tensorflow/tree/master/tensorflow/c/eager https://github.com/tensorflow/tensorflow/tree/master/tensorflow/蟒蛇/渴望
我有以下实体,item最多可以有两个类别,主要和次要.两个类别都使用a 映射ManyToOne到category表JoinColumnsOrFormulas.第一个EAGER按预期获取,但第二个不会出现在SQL语句中并且会延迟加载.这种延迟加载导致经典的n + 1问题.
这是我的项目实体,应该加入两个类别实体:
@Entity
@Table(name = "item", schema = "public", catalog = "stackoverflow_question")
@DynamicUpdate
public class Item extends StackOverflowQuestionEntity {
@Id
@Column(name = "id")
protected Long id;
@Column(name = "site")
private String site;
@ManyToOne
@JoinColumnsOrFormulas({
@JoinColumnOrFormula(formula = @JoinFormula(value = "site", referencedColumnName = "site")),
@JoinColumnOrFormula(formula = @JoinFormula(value = "primary_category_id", referencedColumnName = "category_id"))
})
private Category primaryCategory;
@Column(name = "primary_category_id")
private Long primaryCategoryId;
@ManyToOne
@JoinColumnsOrFormulas({
@JoinColumnOrFormula(formula = @JoinFormula(value = "site", …Run Code Online (Sandbox Code Playgroud) 经过一番研究,我发现了很多关于如何编写简单有效的代码(使用 JPQL)的材料:
但是当涉及到将两者结合起来时 - 如何以有效和干净的方式做到这一点就变得不清楚了。
要么是预先获取有效,要么在内存中应用分页(又名HHH000104:使用集合获取指定的 firstResult/maxResults;在内存中应用!)
要么是分页有效,但急切提取不起作用(即使resultSet实际包含相关实体),导致对数据库的额外查询以批量提取每一行的相关实体。
最接近的,实际上有效的是 https://vladmihalcea.com/fix-hibernate-hhh000104-entity-fetch-pagination-warning-message/
但这让我想知道是否有更直观、更干净的解决方案?
问题:关于如何使用分页和相关实体的急切获取,还有其他最佳实践吗?
注意:解决方案还应提供一种将过滤器应用于从数据库中检索的数据的方法。(例如JPQL WHERE 子句)
我睡不着!:)
我在Haskell编写了一个构建双链表的小程序.基本语言的属性是懒惰的评估(参见下面的一堆代码).我的问题是,我可以做在同一个纯粹的功能性语言急于评估或不?在任何情况下,渴望功能语言必须具备哪些属性才能构建这样的结构(杂质?)?
import Data.List
data DLList a = DLNull |
DLNode { prev :: DLList a
, x :: a
, next :: DLList a
}
deriving (Show)
walkDLList :: (DLList a -> DLList a) -> DLList a -> [a]
walkDLList _ DLNull = []
walkDLList f n@(DLNode _ x _) = x : walkDLList f (f n)
-- Returns first and last items.
makeDLList :: [a] -> (DLList a, DLList a)
makeDLList xs …Run Code Online (Sandbox Code Playgroud) 我们知道在F#中,seq是懒惰的评估.我的问题是,如果我有一个数量有限的seq,如何将其转换为包含其所有值的评估数据类型?
> seq { for i in 1 .. 10 do yield i * i };;
val it : seq<int> = seq [1; 4; 9; 16; ...]
Run Code Online (Sandbox Code Playgroud)
非常感谢.
eager ×10
fetch ×2
hibernate ×2
java ×2
evaluation ×1
f# ×1
generator ×1
guice ×1
haskell ×1
hql ×1
jpa ×1
jpql ×1
linq ×1
list ×1
many-to-one ×1
nhibernate ×1
pagination ×1
postgresql ×1
python ×1
seq ×1
singleton ×1
spool ×1
sql-server ×1
t-sql ×1
tensorflow ×1