2

私は次のようにスカラ特性を持っています

trait Id {
            @javax.persistence.Id
            @GeneratedValue(strategy=GenerationType.IDENTITY)
            @BeanProperty
            var id: Long = _
}

今、私は Id 特性を拡張したいが、id 列名を personid に変更したいエンティティ (Person) を持っています。どうすればこれを達成できますか?
以下の人のスニペット:

@NamedQuery(name=”findAll”,query=”select p from Person p”)
class Person extends Id {
    @BeanProperty
    @Column(name=”personid”)
    def personid = id
}
4

2 に答える 2

5

personidの値を返すメソッドを導入できidます。

trait Person extends Id {
  def personid = id
}

idメンバーを削除するPersonと、サブクラスのインスタンスは、基本クラスのインスタンスであるかのように常に使用可能でなければならないという原則に違反します。つまり、PersonextendsIdの場合、そのすべてのメソッドを呼び出せる必要があります。そうしないと、 type のオブジェクトを typeの参照にid割り当てることができません。PersonId

したがって、 を拡張するIdと、拡張されたトレイト/クラスには常にid.

ただし、 package-privateにすることidで、ベース トレイトの可視性を制限できます。Idid

private[package_name] var id: Long = _
于 2012-06-21T12:15:06.903 に答える
2

JPAが使用する列名を単純にオーバーライドしたい場合は、AttributeOverrideアノテーションを使用できるはずです。

次のようになります。

@MappedSuperclass
trait Id {
        @javax.persistence.Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @BeanProperty
        var id: Long = _
}

@Entity
@AttributeOverride(name="id", column=@Column(name="personid"))
class Person extends Id

アクセスに使用するプロパティ名を変更したい場合はid、アレックスが提案しているようなことをすることができます...

編集:エンティティが特性をPerson拡張できるようにするのを忘れましたId

于 2012-06-21T12:58:54.723 に答える