首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate:@JoinTable

Hibernate:@JoinTable
EN

Stack Overflow用户
提问于 2016-03-17 06:37:48
回答 2查看 409关注 0票数 1

我已经理解了hibernate中的@ have列。现在我已经从@JoinTable开始了。以下是我的POJO

代码语言:javascript
复制
@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


}

在我的控制器中,我完成了以下操作

代码语言:javascript
复制
 @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。我收到以下错误

错误o.h.e.jdbc.spi.SqlExceptionHelper -在这个ResultSet中找不到列名phone_id。

我想要实现的是,当我从person表检索记录时,我还需要相应的phone详细信息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-17 12:20:02

选择Hibernate createQuery方法代替createSqlQuery来匹配实体更准确。试在下面;

代码语言:javascript
复制
    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();
票数 1
EN

Stack Overflow用户

发布于 2016-03-17 07:09:23

代码语言:javascript
复制
@Entity
@Table(name = "person")
public class Person implements java.io.Serializable {

    private long personId;  
    private String name;    
    private String address;
    private Phone phone;    

    public Person () {
    }

    @Id
    @GeneratedValue
    @Column(name = "person_id") 
    public BigDecimal getPersonId() {
        return this.personId;
    }

    @Column(name = "name")  
    public BigDecimal getName() {
        return this.name;
    }

    @Column(name = "Address")
    public BigDecimal getAddress() {
        return this.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")})  
    public Phone getPhone() {
        return this.phone;
    }
    // setter function
}

@Entity
@Table(name = "person_phone")
public class Phone{

    private long personId;
    private String name;

    @Id
    @GeneratedValue
    @Column(name = "person_id")
    public long getPersonId() {
        return this.personId;
    }

    @Column(name = "name")
    public String getName() {
        return this.name;
    }

    //setter function
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36053257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档