gpt4 book ai didi

java - 只获取 Hibernate 中的最后一条记录,但我想要所有记录

转载 作者:行者123 更新时间:2023-11-29 02:20:55 25 4
gpt4 key购买 nike

我正在将 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_id。

这是两个表的我的实体类。首先是 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();
}

最佳答案

我认为您只需一个查询就可以做到这一点:

@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();
}

如果你想获得与指定用户具有相同职业的所有用户而不是所有职业条目,你必须将代码更改为类似

@SuppressWarnings("unchecked")
public List<User> getUsersWithSameProfessionsById(long id) throws Exception {
session = sessionFactory.openSession();
String queryString = "SELECT DISTINCT u FROM Profession p1, Profession p2 JOIN p2.user u 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”。)

关于java - 只获取 Hibernate 中的最后一条记录,但我想要所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31960540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com