Hibernate/SQL检索记录而不返回关联

Hibernate/SQL检索记录而不返回关联,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我想从实体中没有提到关联的表中检索记录。如何使用Hibernate实现这一点 我希望在动物表中获得记录,而不必在下面的示例中检索品种 以下是我的协会: }将fetch类型更改为lazy fetch=FetchType.lazy这将使hibernate在请求或使用品种之前,以及在创建动物对象时,都不会拉取品种在GetAssociatedBrids()方法的@OneToMany注释中,您将fetch属性设置为EAGER。将此更改为LAZY。这将导致在您实际访问关联元素之前不会加载它们。我之前尝试过

我想从实体中没有提到关联的表中检索记录。如何使用Hibernate实现这一点

我希望在动物表中获得记录,而不必在下面的示例中检索品种

以下是我的协会:


}

将fetch类型更改为lazy fetch=FetchType.lazy这将使hibernate在请求或使用品种之前,以及在创建动物对象时,都不会拉取品种

在GetAssociatedBrids()方法的@OneToMany注释中,您将fetch属性设置为EAGER。将此更改为LAZY。这将导致在您实际访问关联元素之前不会加载它们。

我之前尝试过此操作,但它仍然会在数据库上执行查询。我也不知道要在数据库上执行的查询是什么,因为我还想在数据库上执行查询时节省一些性能。您的代码是否调用了getAssociatedBrides()方法?或者你的动物实体以某种方式被序列化,可能是因为它们被发送到远程UI层?我在调试模式下运行了测试,当findByCriteria发生时,我看到日志和查询已被执行以检索相关记录。现在,在请求完成之前,有一个对getAssociatedBurds的调用。在这种情况下,UI层没有发生序列化。好的,我想我上次忽略了一些事情。我看到懒惰的人工作正常,正如你所说的。现在,我得到一个“无会话或会话已关闭”的例外。我阅读了文档,看起来我需要添加@Transactional以便LAZY可以工作。因此,我在调用者上添加了这个注释。现在,我仍然得到同样的例外。看起来我把注解放错地方了。请提出建议。调用结构为:服务->(调用)->hibernateMethod->(调用)->hibernatetemplate.get()正在服务中访问子关联。我已经在服务方法上添加了@Transactional注释。我在前面尝试过,它仍然在数据库上执行查询。我也不知道要在数据库上执行的查询是什么,因为我还想在数据库上执行查询时节省一些性能。我使用LAZY和延迟关闭连接来实现这一点。谢谢你的回复和帮助。
@Entity
@Table(name = "ANIMAL")
public class Animal {
private Long id;
private String type;
private String subtype;
private String category;    
private Set<Breed> associatedBreeds = new HashSet<Breed>();

@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idSeq")
@SequenceGenerator(name = "idSeq", sequenceName = "ID_SEQ")
public Long getId() {
    return id;
}

@Column(name = "TYPE")
public String getType() {
    return type;
}

@Column(name = "SUBTYPE")
public String getSubtype() {
    return subtype;
}

public void setId(Long id) {
    this.id = id;
}

public void setType(String type) {
    this.type = type;
}

public void setSubtype(String subtype) {
    this.subtype = subtype;
}

public void setCategory(String category) {
    this.category = category;
}

@Column(name = "CATEGORY", insertable = false, updatable = false)   
public String getCategory() {
    return category;
}

@OneToMany(mappedBy = "propertyUsage", fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
public Set<Breed> getAssociatedBreeds() {
    return associatedBreeds;
}

public void setAssociatedBreeds(
        Set<Breed> associatedFinancials) {
    this.associatedBreeds = associatedBreeds;
}
}
@Entity
@Table(name = "Breed")
public class Breed {
private Long id;

private Animal animal;

@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idSeq1")
@SequenceGenerator(name = "idSeq1", sequenceName = "ID_SEQ1")
public Long getId() {
    return id;
}

public void setPropertyUsage(PropertyUsage propertyUsage) {
    this.animal = animal;
}

@ManyToOne
@JoinColumn(name="ANIMAL_ID", referencedColumnName="ID")    
public PropertyUsage getAnimal() {
    return animal;
}