我在hibernate中理解了@joincolumn。现在我开始使用@JoinTable。以下是我的 POJO
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue
@Column(name = "person_id")
private long person_id;
@Column(name = "name")
private String name;
@Column(name = "Address")
private String Address;
@OneToOne(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name="person_phone",
joinColumns={@JoinColumn(name="person_id", referencedColumnName="person_id")},
inverseJoinColumns={@JoinColumn(name="phone_id", referencedColumnName="phone_id")})
private Phone phone;
//Getters ande Setters
}
@Entity
@Table(name = "phone")
public class Phone{
@Id
@GeneratedValue
@Column(name = "phone_id")
private long phone_id;
@Column(name = "name")
private String name;
//Getters ande Setters
}
在我的 Controller 中,我做了以下操作
@RequestMapping(value = "/persons", method = RequestMethod.GET)
public List<person> listPersons() {
StringBuilder sql = new StringBuilder();
sql.append("SELECT * FROM person);
Query query = getSession().createSQLQuery(sql.toString()).addEntity(Person.class);
return query.list();
}
当我执行 Select * from person 时。我收到以下错误
ERROR o.h.e.jdbc.spi.SqlExceptionHelper - The column name phone_id was not found in this ResultSet.
我想要实现的是,当我从 person 表中检索记录时,我也想要相应的电话详细信息。
最佳答案
选择Hibernate createQuery方法而不是createSqlQuery来匹配实体更准确。 请尝试以下;
StringBuilder sql = new StringBuilder();
sql.append("FROM Person"); //using hibernate query
Query query = getSession().createQuery(sql.toString()); //Hibernate query so use createQuery not createSqlQuery
return query.list();
关于java - hibernate : @JoinTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36053257/