Câu hỏi này là để theo dõi với previous question của tôi. Tôi cần lấy danh sách các lớp phức tạp. Mỗi có một vài bộ trong đó và chỉ cần một số lượng cụ thể của chúng trong số đó. Tôi đã đọc câu trả lời của những câu hỏi này 1, 2 nhưng không ai trong số họ giải quyết được vấn đề của tôi.Làm thế nào để lấy một tập hợp các đối tượng thành viên bằng Hibernate?
Tôi cần tìm danh sách sinh viên thuộc một nhóm cụ thể và ở một địa điểm cụ thể và số điện thoại của họ trong địa chỉ của họ. Tôi cũng cần hiển thị khoảng cách của từng học sinh với một tọa độ cụ thể.
Mã sau hoạt động tốt, vấn đề duy nhất là tôi không thể truy xuất danh sách đối tượng ví dụ danh sách email, danh sách nhóm và danh sách điện thoại của từng học sinh.
@Entity
public class Student implements java.io.Serializable {
private static final long serialVersionUID = -23949494858373847L;
@Id
@GeneratedValue
String id;
String name;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "student_groups", joinColumns = { @JoinColumn(name = "id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "groupId", nullable = false, updatable = false) })
Set<Group> groups = new HashSet<Group>(0);
..
}
@Entity
public class Address implements java.io.Serializable {
private static final long serialVersionUID = -274634747474623637L;
@Id
@GeneratedValue
String addId;
@Id
@ManyToOne
@JoinColumn(name = "id", nullable = false)
Student student;
@ManyToOne
@JoinColumn(name = "locId", nullable = false)
Location location;
double latitude;
double longitude;
String address;
@OneToMany(mappedBy = "phoneOwner", fetch = FetchType.EAGER)
Set<Phone> phones = new HashSet<Phone>();
String formula = "(6371 * acos (cos (radians("
+ lat
+ ")) * cos(radians(this_.latitude)) * cos(radians(this_.longitude) - radians("
+ lan + ")) +" + "sin (radians(" + lat
+ ")) * sin(radians(this_.latitude)))) as distance";
Session session = sessionFactory.getCurrentSession();
ProjectionList pl = Projections
.projectionList()
.add(Projections.property("std.id").as("id"))
.add(Projections.property("std.name").as("name"))
.add(Projections.property("addr.address").as(
"address"))
.add(Projections.property("location.name").as("location"))
.add(Projections.property("location.city").as("city"))
.add(Projections.property("location.latitude").as("latitude"))
.add(Projections.property("location.longitude").as("longitude"))
.add(Projections.sqlProjection(formula,
new String[] { "distance" },
new Type[] { new DoubleType() }));
List<Students> students = (List<Students) session
.createCriteria(Address.class, "addr")
.createAlias("addr.student", "std")
.createAlias("std.groups", "group")
.createAlias("addr.location", "location")
.setProjection(pl)
.setFetchMode("group", FetchMode.JOIN)
.add(Restrictions.ilike("group.name", groupName))
.add(Restrictions.eq("location.id", locId))
.setResultTransformer(
new AliasToBeanResultTransformer(Students.class))
.list();
Cám ơn câu trả lời của bạn, vui lòng xem câu hỏi này cũng như http://stackoverflow.com/questions/30554572/illegalargumentexception-occurred-while-calling-setter-for-property-expected-ty – Jack