Hibernate 休眠一对一双向映射

Hibernate 休眠一对一双向映射,hibernate,mapping,one-to-one,Hibernate,Mapping,One To One,通过此映射,我在Db中的驱动程序表中获得一个联接列license_id。问题在于: public class Driver { @OneToOne private License license; //.. getter setter }; public class License { @OneToOne(mappedBy='license') private Driver driver; //.. getter setter } 虽然我

通过此映射,我在Db中的驱动程序表中获得一个联接列license_id。问题在于:

public class Driver {

    @OneToOne
    private License license;

    //.. getter setter
};

public class License {

    @OneToOne(mappedBy='license')
    private Driver driver;

   //.. getter setter
}
虽然我从child设置了parent,但该列仍然为空,并且我得到null。
如何避免这种情况?

看起来很俗气,但试着

Driver driver = new Driver();
// save driver then get it etc...

License license = new License();
license.setDriver(driver); 
// save license...

driver.getLicense();

看起来俗气,但试着

Driver driver = new Driver();
// save driver then get it etc...

License license = new License();
license.setDriver(driver); 
// save license...

driver.getLicense();

让我们从更具描述性的映射开始,然后我们可以删除部分,这些部分无论如何都会重新设置为默认值

有一个描述比我的摘录更详细。请看一下:

基于此,让我们通过以下方式扩展映射:

司机

public void setDriver(Driver driver){
    this.driver = driver;
    driver.setLicense(this);
}
执照

public class Driver {

  @Id
  @GeneratedValue
  @Column(name="driver_id")
  private Long driverId;    

  // cascade will do the job for us
  @OneToOne(mappedBy="driver", cascade=CascadeType.ALL)
  private License license;
插入新值时,我们可以显式设置两端:

public class License {

  @Id
  @Column(name="driver_id", unique=true, nullable=false)
  @GeneratedValue(generator="gen")
  @GenericGenerator(name="gen", strategy="foreign"
           , parameters=@Parameter(name="property", value="driver"))
  private Long driverId;

  @OneToOne
  @PrimaryKeyJoinColumn
  private Driver driver
  ...

现在Hibernate层叠功能将为我们提供其余的功能

让我们从更具描述性的映射开始,稍后我们可以删除部分,这些部分将重新设置为默认值

有一个描述比我的摘录更详细。请看一下:

基于此,让我们通过以下方式扩展映射:

司机

public void setDriver(Driver driver){
    this.driver = driver;
    driver.setLicense(this);
}
执照

public class Driver {

  @Id
  @GeneratedValue
  @Column(name="driver_id")
  private Long driverId;    

  // cascade will do the job for us
  @OneToOne(mappedBy="driver", cascade=CascadeType.ALL)
  private License license;
插入新值时,我们可以显式设置两端:

public class License {

  @Id
  @Column(name="driver_id", unique=true, nullable=false)
  @GeneratedValue(generator="gen")
  @GenericGenerator(name="gen", strategy="foreign"
           , parameters=@Parameter(name="property", value="driver"))
  private Long driverId;

  @OneToOne
  @PrimaryKeyJoinColumn
  private Driver driver
  ...

现在Hibernate级联功能将为我们提供其余的功能

在使用驱动程序保存许可证后,您是否从数据库中加载了使用许可证的驱动程序?是的,我这样做了,但不起作用。在这种情况下,我想我需要查看完整的代码。你能发布第二部分的代码吗?在用driver保存了license之后,你从数据库中加载了driver license吗?是的,我这样做了,但没有成功。在这种情况下,我想我需要查看完整的代码。你能把第二部分的代码贴出来吗?