[英]How to override trait variable name in Scala
我有以下scala特征
trait Id {
@javax.persistence.Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@BeanProperty
var id: Long = _
}
现在,我有一个实体(人),我想扩展其Id特性,但将id列名称更改为personid。 我该如何实现?
下面的人员摘要:
@NamedQuery(name=”findAll”,query=”select p from Person p”)
class Person extends Id {
@BeanProperty
@Column(name=”personid”)
def personid = id
}
您可以引入方法personid
,该方法返回id
的值:
trait Person extends Id {
def personid = id
}
在Person
删除id
成员将违反以下原则:子类实例必须始终可用,就好像它们是基类的实例一样。 也就是说,如果Person
扩展了Id
,则您必须能够在其上调用所有id
方法,否则您将无法将Person
类型的对象分配给Id
类型的引用。
因此,如果扩展Id
,则扩展的特征/类将始终具有id
。
但是,您可以通过使id
package-private来限制id
在基本特征Id
的可见性:
private[package_name] var id: Long = _
如果您要做的只是简单地覆盖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
特性
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.