如前所述,不建議在Scala上使用Spring Data或Hibernate,因爲它不適用於字節碼操作(以及某些接口不兼容)。Spring數據與斯卡拉
我的問題然而,因爲它可以在平行SBT斯卡拉代碼和Java,它是一個好主意,我的代碼用Java庫和服務,然後在我的Scala代碼使用它們?這是否擺脫了字節碼約束?
我在這裏問,因爲我找不到任何資源。
如前所述,不建議在Scala上使用Spring Data或Hibernate,因爲它不適用於字節碼操作(以及某些接口不兼容)。Spring數據與斯卡拉
我的問題然而,因爲它可以在平行SBT斯卡拉代碼和Java,它是一個好主意,我的代碼用Java庫和服務,然後在我的Scala代碼使用它們?這是否擺脫了字節碼約束?
我在這裏問,因爲我找不到任何資源。
這是可能的;你也可以通過意識到如何達到同樣的目的,例如Hibernate想要與類進行接口並以相同的格式編寫Scala類(大量的@BeanProperty var x: String = _
)。但是你會發現這樣的類(不管是用Java還是Scala編寫)在scala中的使用都不是很習慣,當試圖將它們與Scala庫一起使用時(它們更適合用於不可變的case類而不是java bean)會有摩擦。所以你可以使用這種方法編寫系統,至少在過渡時期,但最終你最好只選擇一個scala或java,並使用一個習慣於你的首選語言的庫。
使用Scala for Hibernate沒有問題。你甚至不需要使用@BeanProperty
。例如:
@Entity
class Role {
@Id @GeneratedValue
var id: Long = _
@Index(name="role_name")
var name: String = _
var created_at: Date = _
var updated_at: Date = _
@ManyToMany
private var sub_role: java.util.Set[Role] = _
def subRoles: Set[Role] = {
if (sub_role == null) sub_role = new java.util.HashSet[Role]
sub_role
}
@ManyToMany
private var permission: java.util.Set[Permission] = _
def permissions: Set[Permission] = {
if (permission == null) permission = new java.util.HashSet[Permission]
permission
}
}
這是一個來自我工作過的大量Scala/Hibernate項目之一的示例類。
您需要使用Java的一件事是定製JSR-303驗證註釋。
嗨@sourcedelica,你有更多的例子嗎?我放棄使用scala ORM並想回到JPA。我認爲spring-data-jpa – Sergey