2016-04-11 6 views
0

Обучение спящего режима. У меня есть следующие классы пользователей, регион, страна следующегоHibernate OneToOne Таблица присоединиться

 public class User { 

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int id; 
    @Column(name = "first_name") 
    Private String firstName; 
    @Column(name = "last_name") 
    private String lastName; 
    @OneToOne(fetch = FetchType.EAGER) 
    @JoinTable(name = "user_country_region", joinColumns ={@JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "country_id") }) 
    private Country userCountry; 

    @OneToOne(fetch = FetchType.EAGER) 
    @JoinTable(name = "user_country_region", joinColumns = {@JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "region_id") }) 
    private Region userRegion; 

    //With its respective Getters and Setters 
    } 

    public class Country { 

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int id; 
    @Column(name = "name") 
    private String name; 

    //With its respective Getters and Setters 
    } 

    public class Region { 

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int id; 
    @Column(name = "name") 
    private String name; 

    //With its respective Getters and Setters 
    } 

Проблемы я облицовка зимует запрос возвращает только область, а не страну. Что может быть причиной этого?

Пробовал получать значения по странам и регионам, как показано ниже

System.out.println("Country: "+user.getCountry().getName()); 
    System.out.println("Region: "+user.getRegion().getName()); 

ответ от Hibernate Show SQL. Кажется, отсутствуют детали страны.

Hibernate: 
    select 
     this_.id as id1_3_3_, 
     this_.first_name as first_na2_3_3_, 
     this_.last_name as last_na3_3_3_, 
     region2_.id as id1_8_2_, 
     region2_.name as name2_8_2_ 
    from 
     user this_ 
    left outer join 
     user_country_region this_1_ 
     on this_.id=this_1_.user_id 
    left outer join 
    region region2_ 
     on this_1_.region_id=region2_.id 
    where 
    this_.id=? 
+0

Не могли бы вы подтвердить имена своих таблиц. user_country_region, user_coutnry_region? Правильны ли они? просто чтобы начать с основ? – LearningPhase

+0

Да, они такие же. Поля внутри таблицы следующие: user_id, country_id, region_id. Эта таблица объединяет три. –

+0

только что обновил вопрос, как я пытался инициализировать страну и регион пользователя –

ответ

0

Возможно, вы сделали опечатку в имени JoinTable. Вы говорите, что это та же таблица, но user_country_region <> user_coutnry_region

+0

Нет сожаления, что это была опечатка на вопрос. просто исправился. Если бы проблема была в получении ERROR: отношения «user_coutnry_region» не существуют –

1

Это недопустимое сопоставление. У меня есть эта ошибка с Hibernate 5, создавая схему Hibernate.

org.hibernate.boot.spi.InFlightMetadataCollector$DuplicateSecondaryTableException: 
Table with that name [user_country_region] already associated with entity 

Во всяком случае, если вы можете использовать это отображение с вашей версией Hibernate, имея такой вид отображения с присоединиться к таблице для двух отношений к ошибкам.

Просто используйте это сопоставление, чтобы связать User с Country и Region по столбцам внешних ключей.

public class User { 

    @OneToOne 
    private Country country; 

    @OneToOne 
    private Region region; 

    } 
+0

Кажется, нет никаких других решений, которые являются странными. Придется работать с этим. –

+0

Работает, когда я переключаюсь с OneToOne на @ManyToMany. Как? У меня нет идей. –

Смежные вопросы