我正在使用Hibernate和Spring Rest。我的数据库中有两个名为user_table和user_profession的表。 user_table包含用户信息,主键是id。 user_profession包含具有u_id外键的用户的职业。项目的工作是我将u_id传递给user_profession并从该职业获得用户职业我从user_profession表获取具有该职业的所有u_id。现在我从user_profession获得了许多u_id,现在我使用@OneToOne映射将user_profession映射到user_table,并获得与该u_id相对应的用户信息。
如果一个u_id在user_profession中有单一职业但是如果一个u_id有多个职业的多个条目,那么我的工作正常,那么我只获得最后一个职业结果,而我想要将u_id传递给user_profession表,如果那个u_id有两个职业有两个职业然后它可以搜索u_id两个职业,但它只取得第二职业u_ids。
这是两个表的My Entity类。首先是user_profession表的 Profession.java
@Entity
@Table(name="user_profession")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Profession implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name="id")
private long id;
@Column(name="profession")
private String profession;
@Column(name="u_id")
private String u_id;
@OneToOne
@JoinColumn(name = "u_id", referencedColumnName = "id", insertable=false, updatable=false)
private User user;
//Getters and setters
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public long getId() {
return id;
}
public String getU_id() {
return u_id;
}
public void setU_id(String u_id) {
this.u_id = u_id;
}
public void setId(long id) {
this.id = id;
}
public String getProfession() {
return profession;
}
public void setProfession(String profession) {
this.profession = profession;
}
}
以下是user_table
的 User.java@Entity
@Table(name="user_table")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name="id")
private long id;
@Column(name="full_name")
private String fullName;
@Column(name="username")
private String username;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
这是我的 DAO 类
@SuppressWarnings("unchecked")
public List<Profession> getProfessionById(long id) throws Exception {
session = sessionFactory.openSession();
session.beginTransaction();
String queryString = "from Profession where u_id = :id";
Query query = session.createQuery(queryString);
query.setLong("id", id);
List<Profession> professionList = query.list();
String queryString1 = "from Profession where profession = :pro";
Query query1 = null;
for(Profession professionList1 : professionList){
query1=session.createQuery(queryString1);
query1.setString("pro", professionList1.getProfession());
}
session.flush();
session.getTransaction().commit();
return query1.list();
}
答案 0 :(得分:2)
我认为只需一个查询就可以做到这一点:
<Grid>
<Label Content="{Binding Title}" />
</Grid>
如果您希望获得与指定用户具有相同专业的所有用户而不是所有专业条目,则必须将代码更改为
@SuppressWarnings("unchecked")
public List<Profession> getProfessionById(long id) throws Exception {
session = sessionFactory.openSession();
// Why would you need a transaction?
// session.beginTransaction();
String queryString = "SELECT p2 FROM Profession p1, Profession p2 WHERE p1.u_id=:id AND p2.profession=p1.profession";
Query query = session.createQuery(queryString);
query.setLong("id", id);
return query.list();
}
(我知道,“DISTINCT”,糟糕的风格 - 你也可以使用“GROUP BY”。)