我即将编写一个依赖于MySQL数据库的Scala命令行应用程序.我一直在四处寻找Orms,但我很难找到一个可以很好地工作的.
Lift ORM看起来不错,但我不确定它能否与整个Lift web框架解耦.ActiveObjects看起来也不错,但作者说它可能无法与Scala配合使用.
我不是从Java来到Scala的,所以我不知道所有的 Select .有没有人在Scala中使用过ORM?如果有,您使用的是什么?它的工作效果如何?
我即将编写一个依赖于MySQL数据库的Scala命令行应用程序.我一直在四处寻找Orms,但我很难找到一个可以很好地工作的.
Lift ORM看起来不错,但我不确定它能否与整个Lift web框架解耦.ActiveObjects看起来也不错,但作者说它可能无法与Scala配合使用.
我不是从Java来到Scala的,所以我不知道所有的 Select .有没有人在Scala中使用过ORM?如果有,您使用的是什么?它的工作效果如何?
面向JPA的框架(例如,Hibernate)不适合惯用的Scala应用程序有几个原因:
@JoinTable
-> @JoinColumn
);PersistentCollections
),就不可能将Scala集合映射到关联;我相信还有更多的原因.这就是为什么我们已经开始了Circumflex ORM project年.这个纯Scala ORM尽最大努力消除classic Java ORM的噩梦.具体来说,您定义实体的方式与使用classic DDL语句定义实体的方式基本相同:
class User extends Record[User] {
val name = "name".TEXT.NOT_NULL
val admin = "admin".BOOLEAN.NOT_NULL.DEFAULT('false')
}
object User extends Table[User] {
def byName(n: String): Seq[User] = criteria.add(this.name LIKE n).list
}
// example with foreign keys:
class Account extends Record[Account] {
val accountNumber = "acc_number".BIGINT.NOT_NULL
val user = "user_id".REFERENCES(User).ON_DELETE(CASCADE)
val amount = "amount".NUMERIC(10,2).NOT_NULL
}
object Account extends Table[Account]
正如您所看到的,这些声明比classic 的JPAPOJO更加冗长.但事实上,有几个概念组合在一起:
Triflex ORM唯一缺少的是:
另外,我希望这篇文章不会被视为广告.事实并非如此,我只是尽量客观.