首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Hibernate OneToOne表连接

Hibernate OneToOne表连接
EN

Stack Overflow用户
提问于 2016-04-11 21:37:28
回答 1查看 1.4K关注 0票数 0

学习休眠。我有以下类User、Region、Country,如下所示

代码语言:javascript
代码运行次数:0
运行
复制
     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 
   }

我面临的问题是hibernate查询只返回区域而不返回国家。这可能是什么原因造成的?

已尝试获取国家和地区值,如下所示

代码语言:javascript
代码运行次数:0
运行
复制
    System.out.println("Country: "+user.getCountry().getName());
    System.out.println("Region: "+user.getRegion().getName());

来自Hibernate显示sql的响应。似乎缺少国家的详细信息。

代码语言:javascript
代码运行次数:0
运行
复制
    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=?
EN

回答 1

Stack Overflow用户

发布于 2016-04-11 22:32:54

这是一个无效的映射。在使用Hibernate创建模式时,我在Hibernate 5中遇到了这个错误。

代码语言:javascript
代码运行次数:0
运行
复制
org.hibernate.boot.spi.InFlightMetadataCollector$DuplicateSecondaryTableException: 
Table with that name [user_country_region] already associated with entity

无论如何,如果您可以在您的Hibernate版本中使用这种映射,那么将这种映射与两个关系的连接表一起使用很容易出错。

只需使用此映射通过外键列将UserCountryRegion关联。

代码语言:javascript
代码运行次数:0
运行
复制
public class User {

     @OneToOne
     private Country country;

     @OneToOne
     private Region region;

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

https://stackoverflow.com/questions/36550367

复制
相关文章

相似问题

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