相关疑难解决方法(0)

Hibernate noob获取连接问题

我有两个类,Test2和Test3.Test2有一个属性test3,它是Test3的一个实例.换句话说,我有一个单向的OneToOne关联,test2引用了test3.

当我从db中选择Test2时,我可以看到正在进行单独的选择以获取相关test3类的详细信息.这是着名的1 + N选择问题.

要修复此问题以使用单个选择,我尝试使用fetch = join注释,我理解为@Fetch(FetchMode.JOIN)

但是,如果将fetch设置为join,我仍会看到单独的选择.以下是我的设置的相关部分..

hibernate.cfg.xml中:

<property name="max_fetch_depth">2</property>
Run Code Online (Sandbox Code Playgroud)

测试2:

public class Test2 {
 @OneToOne (cascade=CascadeType.ALL , fetch=FetchType.EAGER)
 @JoinColumn (name="test3_id")
 @Fetch(FetchMode.JOIN)
 public Test3 getTest3() {
  return test3;
}
Run Code Online (Sandbox Code Playgroud)

NB我将FetchType设置为EAGER绝望,即使它无论如何都默认为EAGER OneToOne映射,但它没有任何区别.

谢谢你的帮助!

编辑:我几乎放弃了尝试使用FetchMode.JOIN - 任何人都可以确认他们已经让它工作,即产生左外连接?在文档中,我看到"通常,映射文档不用于自定义提取.相反,我们保留默认行为,并使用HQL中的左连接提取覆盖特定事务"

如果我做一个左连接取代:

query = session.createQuery("来自Test2 t2 left join fetch t2.test3");

然后我确实得到了我想要的结果 - 即查询中的左外连接.

Edit number 2:

Guys, thank you so much for your responses. Now I want to get to the bottom of this. I usually find that when I investigate something, I end up …

java hibernate

9
推荐指数
2
解决办法
1万
查看次数

Java Spring JPA FetchMode.JOIN不使用JOIN

我使用JPA在Spring中有一个非常复杂的模型结构.当使用Spring Data查询我的数据库时,我期待一个查询使用JOINS来检索数据,而Spring正在运行多个查询.以下是我的模型结构:

Feed属性:

public class FeedAttribute {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="feedAttributeId", nullable=false)
private Integer feedAttributeId;

@ManyToOne(cascade = CascadeType.DETACH)
@Fetch(value=FetchMode.JOIN)
@JoinColumn(name="feedId", nullable=false)
private Feed feed;

@ManyToOne(cascade = CascadeType.DETACH)
@Fetch(value=FetchMode.JOIN)
@JoinColumn(name="sourceEntityAttributeId", nullable=false)
private EntityAttribute sourceEntityAttribute;

@ManyToOne(cascade = CascadeType.DETACH)
@Fetch(value=FetchMode.JOIN)
@JoinColumn(name="targetEntityAttributeId", nullable=false)
private EntityAttribute targetEntityAttribute;

}
Run Code Online (Sandbox Code Playgroud)

饲料:

public class Feed {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="feedId", nullable=false, length=100)
private Integer feedId;

@Column(name="feedName", nullable=false, length=100)
private String feedName;

@ManyToOne(cascade = CascadeType.DETACH)
@Fetch(value=FetchMode.JOIN)
@JoinColumn(name="releaseId", nullable=false) 
private Release release;

@ManyToOne(cascade = CascadeType.DETACH)
@Fetch(value=FetchMode.JOIN)
@JoinColumn(name="sourceSystemId", nullable=false) 
private System sourceSystem;

@ManyToOne(cascade …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa spring-data

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

标签 统计

hibernate ×2

java ×2

jpa ×1

spring-data ×1