小编elc*_*cye的帖子

为什么不能休眠懒惰地获取@ManyToOne 和@OneToOne?

在经历了一些令人沮丧的问题和测试之后,我了解到 hibernate 不能懒惰地获取 ToOne 关系。

从我读过的内容来看,hibernate 通过将自己的 Set 设置为代理来延迟获取 ToMany,并且当在该 Set 上调用方法时,它会在执行操作之前获取数据库中的数据。美好的。

对于 ToOne,我看到的原因是,由于属性可以为 null(与 ToMany 不同),hibernate 必须知道它是否需要使用 null 或代理填充它,并且 hibernate 在不查询另一个表的情况下无法知道这一点。由于它必须查询其他表,因此它同时急切地获取数据。

我觉得这很愚蠢。我可以在关系的非拥有方理解它,表中没有任何内容指示是否填充了 toOne,但在拥有方,表包含一个带有外键的列,该列要么为空,要么不为空。

为什么不能休眠查询表并根据该列的值将属性设置为 null 或代理?它不需要检查第二个表,如果你的列不为空,你就知道第二个表有一个相应的条目(如果没有,你有完整性问题,hibernate 应该抛出)。

java hibernate lazy-loading one-to-one

5
推荐指数
1
解决办法
182
查看次数

泛型方法参数的类型

假设我有一个带有泛型参数的方法:

public <U> void genericMethod(U param) {
    // doStuff
}
Run Code Online (Sandbox Code Playgroud)

我也有两个类,其中一个扩展了另一个类:

public class A {}
public class B extends A {}
Run Code Online (Sandbox Code Playgroud)

我这样做:

A var = new B();
genericMethod(var);
Run Code Online (Sandbox Code Playgroud)

genericMethod,什么是类型U

我传递的变量genericMethod被声明为A,但实际上是B,所以是U类型A还是B

我试过测试它,但我找不到U在运行时获取信息的方法。

java generics inheritance

3
推荐指数
1
解决办法
72
查看次数

Hazelcast:禁用集群

我在 java 项目上使用 Hazelcast,但我只使用单个节点并且不需要任何集群。当多个开发实例相互发现并形成集群时,这实际上会给我们带来问题。

有没有办法在 xml 配置中完全禁用集群?

编辑:我正在使用 Hazelcast 3.8.4,我尝试像这样禁用多播,但看起来它仍然处于启用状态:

    <hz:hazelcast id="hazelcast">
        <hz:config>
            <hz:group name="dev" password="password"/>
            <hz:properties>
                <hz:property name="hazelcast.logging.type">slf4j</hz:property>
            </hz:properties>
            <hz:network port="5701" port-auto-increment="true">
                <hz:join>
                    <hz:multicast enabled="false"/>
                </hz:join>
            </hz:network>
            <hz:topic name="topicStuff"/>
        </hz:config>
    </hz:hazelcast>
Run Code Online (Sandbox Code Playgroud)

日志:

12:54:51,273 INFO  [com.hazelcast.hibernate.HazelcastLocalCacheRegionFactory] - Starting up HazelcastLocalCacheRegionFactory
12:54:51,284 INFO  [com.hazelcast.config.XmlConfigLocator] - Loading 'hazelcast-default.xml' from classpath.
12:54:51,398 INFO  [com.hazelcast.instance.DefaultAddressPicker] - [LOCAL] [dev] [3.8.4] Prefer IPv4 stack is true.
12:54:51,409 INFO  [com.hazelcast.instance.DefaultAddressPicker] - [LOCAL] [dev] [3.8.4] Picked [10.212.134.200]:5701, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5701], bind any local is true 
12:54:51,426 INFO  [com.hazelcast.system] …
Run Code Online (Sandbox Code Playgroud)

java hazelcast

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