[英]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.