2015-01-09 127 views
1

如前所述,不建議在Scala上使用Spring Data或Hibernate,因爲它不適用於字節碼操作(以及某些接口不兼容)。Spring數據與斯卡拉


我的問題然而,因爲它可以在平行SBT斯卡拉代碼和Java,它是一個好主意,我的代碼用Java庫和服務,然後在我的Scala代碼使用它們?這是否擺脫了字節碼約束?

我在這裏問,因爲我找不到任何資源。

回答

0

這是可能的;你也可以通過意識到如何達到同樣的目的,例如Hibernate想要與類進行接口並以相同的格式編寫Scala類(大量的@BeanProperty var x: String = _)。但是你會發現這樣的類(不管是用Java還是Scala編寫)在scala中的使用都不是很習慣,當試圖將它們與Scala庫一起使用時(它們更適合用於不可變的case類而不是java bean)會有摩擦。所以你可以使用這種方法編寫系統,至少在過渡時期,但最終你最好只選擇一個scala或java,並使用一個習慣於你的首選語言的庫。

2

使用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驗證註釋。

+0

嗨@sourcedelica,你有更多的例子嗎?我放棄使用scala ORM並想回到JPA。我認爲spring-data-jpa – Sergey