4

@Id親エンティティのフィールドに割り当てられた後に子エンティティを再割り当てする方法はありますか

例えば:

@MappedSuperclass
@Access(AccessType.FIELD)
public abstract class Parent implements Serializable {

  @Id
  protected Integer parentId;

  public Integer getId() {
    return parentId;
  }

  public void setId(Integer id) {
    this.id = parentId;
  }
}


@Entity
@Access(AccessType.FIELD)
public class Child extends Parent implements Serializable {

  /*
   What should be added to this entity to re assign the @Id to a new field and 
   make the parentId field just an ordianry field in the Child, not the entity Id
  */
  @Id
  private Long childId;

}

を使用しようとしまし@AttributeOverrideたが、提供できるのは id 列の名前を変更することだけです。

4

2 に答える 2

4

設計上の問題のように聞こえます。

これを達成する適切な方法は、おそらく、 を除く@MappedSuperclass GenericEntityすべての属性を持つ別のクラス : を定義することです:ParentparentId

@MappedSuperclass
@Access(AccessType.FIELD)
public abstract class GenericEntity implements Serializable {
     ... all your common attributes without parentId
}

@MappedSuperclass
public abstract class Parent extends GenericEntity implements Serializable {

    @Id
    protected Integer parentId;

    public Integer getId() {
        return parentId;
    }

    public void setId(Integer id) {
        this.id = parentId;
    }

    //nothing more in this class
}

@Entity
public class Child extends GenericEntity implements Serializable {

   @Id
   private Long childId;

   private Integer parentId; //if you need it

   ...
}    

別の実験的な解決策は、クラスparentId内のフィールドを非表示にすることです。Child

免責事項 : このアプローチはお勧めしません。うまくいくかどうかもわかりません。

@Entity
@Access(AccessType.FIELD)
public class Child extends GenericEntity implements Serializable {

   @Id
   private Long childId;

   private Integer parentId;

   ...
}    
于 2013-11-14T16:05:31.677 に答える
0

注釈メタデータを xml でオーバーライドできます。休止状態については、たとえばこの投稿を参照してください。

一般的な JPA については、たとえばこの投稿を参照してください

于 2013-11-14T15:44:02.317 に答える