是否可以在休眠状态下使用相同的" OneToOne" -Relationship两次?

时间:2015-04-28 13:18:28

标签: java hibernate mapping conditional

我不知道如何在标题中描述我的问题,但我希望它能做到。 所以这是我的情况。

我使用hibernate将我的实体映射到数据库表。

我有一个这样的实体:

@Entity
@Table(name = "EX.EXAMPLE")
public abstract class Entity
{
  private CustomEntity customEntity;
  public static final String CUSTOM_ENTITY = "customEntity";

  @OneToOne(cascade = CascadeType.ALL, mappedBy = CustomEntity.ENTITY, fetch = FetchType.LAZY)
  @Fetch(FetchMode.SELECT)
  public CustomEntity getCustomEntity()
  {
    return this.customEntity;
  }
}

我的CustomEntity

    @Entity
    @Table(name = "EX.EXAMPLE2")
    public class CustomEntity 
    {
      private Entity entity;
      public static final String ENTITY = "entity";

      @OneToOne
      @JoinColumn(name = "ID_ENTITY", nullable = true)
      public Entity getEntity()
      {
        return this.ntity;
      }
    }

所以这是我的问题:是否可以向Entity添加另一个CustomEntity关系?我该如何映射呢? 我的意思是:

    @Entity
    @Table(name = "EX.EXAMPLE")
    public abstract class Entity
    {
      private CustomEntity customEntity;
      public static final String CUSTOM_ENTITY = "customEntity";

      private CustomEntity customEntity2;
      public static final String CUSTOM_ENTITY2 = "customEntity2";


      @OneToOne(cascade = CascadeType.ALL, mappedBy = CustomEntity.ENTITY, fetch = FetchType.LAZY)
      @Fetch(FetchMode.SELECT)
      public CustomEntity getCustomEntity()
      {
        return this.customEntity;
      }

      @OneToOne(cascade = CascadeType.ALL, mappedBy = CustomEntity.ENTITY, fetch = FetchType.LAZY)
      @Fetch(FetchMode.SELECT)
      public CustomEntity getCustomEntity2()
      {
        return this.customEntity2;
      }
    }

我只是通过将customEntity更改为Entity中的列表来管理它。

问候

1 个答案:

答案 0 :(得分:2)

是的,这是完全正常的情况。您只需要两个具有不同mappedBy`的字段,每个关系一个

  @OneToOne(cascade = CascadeType.ALL, mappedBy = CustomEntity.ENTITY1, fetch = FetchType.LAZY)
  @Fetch(FetchMode.SELECT)
  public CustomEntity getCustomEntity()
  {
    return this.customEntity;
  }

  @OneToOne(cascade = CascadeType.ALL, mappedBy = CustomEntity.ENTITY2, fetch = FetchType.LAZY)
  @Fetch(FetchMode.SELECT)
  @JoinColumn(name = "entity_2_id")
  public CustomEntity getCustomEntity2()
  {
    return this.customEntity2;
  }

CustomEntity中的两个字段,每个映射一个

  @OneToOne
  @JoinColumn(name = "ID_ENTITY_1", nullable = true)
  public Entity getEntity1()
  {
    return this.entity1;
  }

  @OneToOne
  @JoinColumn(name = "ID_ENTITY_2", nullable = true)
  public Entity getEntity2()
  {
    return this.entity2;
  }