2

我有如下的scala特征

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

现在我有一个实体(Person),我想扩展 Id 特征,但将 id 列名称更改为 personid。我怎样才能做到这一点?
人物片段如下:

@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将违反子类实例必须始终可用的原则,就好像它们是基类的实例一样。也就是说,如果Personextends Id,那么您必须能够调用它的所有方法id,否则您将无法将 type 的对象分配给 typePerson的引用Id

因此,如果您 extend Id,则扩展的 trait/class 将始终具有id.

但是,您可以通过将包设为私有来限制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那么您可以执行 Alex 建议的操作...

编辑:忘记让Person实体扩展Id特征

于 2012-06-21T12:58:54.723 回答