繁体   English   中英

Hibernate OneToOne表联接

[英]Hibernate OneToOne Table join

学习休眠。 我有以下类别的用户,地区和国家,如下所示

     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=?

这是无效的映射。 我在通过Hibernate创建架构时遇到了Hibernate 5错误。

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

无论如何,如果您可以在您的Hibernate版本中使用此映射,则对于带有两个关系的联接表进行此类映射很容易出错。

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

public class User {

     @OneToOne
     private Country country;

     @OneToOne
     private Region region;

   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM