我有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
}
答案 0 :(得分:4)
您可以引入方法personid
,该方法返回id
:
trait Person extends Id {
def personid = id
}
删除id
中的Person
成员将违反子类实例必须始终可用的原则,就好像它们是基类的实例一样。也就是说,如果Person
扩展Id
,那么您必须能够在其上调用id
的所有方法,否则您将无法分配{{1}类型的对象{} 1}类型的引用。
因此,如果您扩展Person
,扩展特征/类将始终具有Id
。
但是,您可以通过Id
package-private来限制id
在基本特征id
中的展示率:
Id
答案 1 :(得分: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
特征