2016-03-17 2 views
1

Я понял @joincolumn в спящем режиме. Теперь я начал с @JoinTable. Ниже мой POJOHibernate: @JoinTable

@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 


} 

В моем контроллере, я сделал следующий

@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 * от человека. Я получаю следующую ошибку

ERROR o.h.e.jdbc.spi.SqlExceptionHelper - имя столбца phone_id был не найден в ResultSet.

То, что я хочу добиться того, когда я получить запись из людей таблицы Я хочу соответствующий телефона детали также.

+0

Вы не задали вопрос. – ChiefTwoPencils

+0

В телефоне, почему имя столбца «phone_id», но имя переменной - person_id? – VinhNT

+0

Извините, опечатка ошибка. теперь исправлено – Learner

ответ

1

Выбор метода спящего режима 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(); 
+1

'getSession(). CreateQuery (« FROM Person »);' достаточно достаточно –

+0

Да :). Я отредактировал код hastily –

+1

Спасибо, тонна..Он работал! :) – Learner

-1
@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 
} 
+0

Я хочу получить таблицу соединений. person_id - ошибка опечатки, и я изменил ее. – Learner

+0

Я обновил класс сущностей, пожалуйста, попробуйте и помогите исправить опечатку, если таковые имеются :) – VinhNT

+0

@VinhNT В базе данных есть 3 таблицы, Person, person_phone и телефон и 2 сущности Person и Phone. Ваше решение для joinColumn не для joinTable –