我有一个如下的类,需要使用Hibernate从数据库中检索。问题是我的班级有多个成员,其中大多数是班级,如何检索他们?
@Entity
public class Student {
@Id
long id;
String name;
String fname;
@OneToMany
List<Course> courses;
@ManyToOne
Dealer dealer;
...
}
@Entity
public class Dealer {
@Id
long id;
String name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "cr.dealer", cascade = CascadeType.ALL)
Set<Car> cars = new HashSet<Cars>(0);
..
}
我需要检索学生ID 1及其所有课程,经销商和经销商的汽车清单。
我的预测如下,但不返回任何内容。
...
.setProjection(Projections.projectionList()
.add(Projections.property("friends.cars").as("cars")
...
因为您具有课程列表和一组汽车,所以您只需在一个查询中获取整个图形即可:
select s
from Student s
left join fetch s.courses
left join fetch s.dealer d
left join fetch d.cars
where s.id = :id
因为您要获取两个集合,所以此查询将生成笛卡尔乘积,因此您需要确保所选的子集合没有太多条目。
如果您不想运行笛卡尔积,则只需运行以下查询:
select s
from Student s
left join fetch s.courses
left join fetch s.dealer d
where s.id = :id
然后您访问Dealer.cars并通过单独的查询获取该集合:
Student s = ...;
s.getDealer().getCars().size();
问题内容: 使用以下代码,我可以成功检索用户的地址字段,为此,我需要使用Projection定义其所有字段。想象地址有100个字段,在这种情况下,我必须定义所有字段。 我想知道是否可以仅返回客户的地址对象而不在Proposition中定义其所有字段吗? 我知道我可以检索地址的ID并使用它来检索其对象,但是我想知道是否还有其他方法而不是此方法或定义其所有字段。 hibernate 我也使用了以下内容
问题内容: 我有一个接收对象并根据其检测到的对象类型执行某些操作的方法: 如何降低环复杂性?我四处搜寻,但找不到任何有用的资讯。 问题答案: 您不能为此使用面向对象的方法吗?创建具有该方法的接口,然后创建实现所需行为的子类?然后调用将执行适当的行为?
问题内容: 这个问题是我先前的问题的后续。我需要检索复杂类的列表。 我需要找到一个特定组的学生列表,这些学生位于特定的位置,其电话号码位于其地址中。我还需要显示每个学生到特定坐标的距离。 下面的代码工作正常,唯一的问题是我无法检索对象列表,例如电子邮件列表,组列表和每个学生的电话列表。 问题答案: hibernate的默认类不会传输嵌套对象,如果您遇到性能问题,应尝试以下代码。 看看这个链接和这一
我正试图从一个站点获取一个数字(比特币的价值),使用下面的代码 它应该打印一个数字,但它没有打印。我尝试使用其他模块,如.gettext,但结果总是没有。我可以用什么来获得我想要的值?
我试图利用Querydsl从表中获取一些结果。到目前为止,这是我尝试过的-- 如何在上面的中合并以便只获取第一个结果?
我是JPA/JPQL的新手,所以如果这个问题不是很清楚,请原谅。 我正在使用以下JPQL查询: 查询在无状态会话上运行,以便获得DB中当前数据的事实上的快照,该快照与实体管理器分离(因此使用了left join fetch)。 不幸的是,我遇到了两个问题: 在尝试微调性能时,使用本机查询似乎并没有比使用JPQL查询更好的性能。使用本机查询也会产生对象类型的结果,这需要后期处理。