Ube*_*lex 37 java hibernate scala
我一直在玩Scala,我想知道是否有人有使用hibernate和mysql作为scala对象的持久存储的经验?它开箱即用还是有很多工作要做?
sha*_*ang 23
大多数时候,Scala + Hibernate工作得很好,可以轻松克服轻微的颠簸.例如,在处理集合时,Hibernate需要使用java.util接口.但是如果你想点击Scala更强大的库,你可以导入scala.collection.jcl.Conversions._.
您可以查看Frank Sommers的帖子了解更多信息.
nat*_*usa 16
这绝对不是很多工作.一个简单的hibernate + scala示例可以在几十行中定义.Scala和Java可以混合在同一个项目中.特别是,hibernate-scala组合使得可以将JPA框架和非常灵活的orm层与scala提供的不可变结构和函数编程的优雅结合起来.
试验hibernate和scala的最简单方法是通过hibernate/jpa使用内存中的hsqldb数据库.首先,让我们定义域模型.在这种情况下,scala类根据hibernate样式注释,关于我的好友.
package nl.busa.jpa
import javax.persistence._
@Entity
@Table(name = "buddy")
class Buddy(first: String, last: String) {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
var id: Int = _
var firstName: String = first
var lastName: String = last
def this() = this (null, null)
override def toString = id + " = " + firstName + " " + lastName
}
Run Code Online (Sandbox Code Playgroud)
注意scala类比java类更紧凑,因为我们不需要典型的getter/setter样板代码.现在让我们确保加载了jpa模块和数据库模型.根据hibernate规范,让我们添加众所周知的hibernate配置文件:resources/META-INF/persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="nl.busa.jpa.HibernateJpaScalaTutorial">
<description>
Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
</description>
<class>nl.busa.jpa.HibernateJpaScalaTutorial</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:JpaScala"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
定义持久性配置后,让我们继续主scala文件:
package nl.busa.jpa
import javax.persistence.EntityManager
import javax.persistence.EntityManagerFactory
import javax.persistence.Persistence
import scala.collection.JavaConversions._
object HibernateJpaScalaTutorial {
var entityManagerFactory: EntityManagerFactory = Persistence.createEntityManagerFactory( "nl.busa.jpa.HibernateJpaScalaTutorial" )
var entityManager: EntityManager = entityManagerFactory.createEntityManager()
def main( args : Array[String]) {
entityManager.getTransaction().begin()
entityManager.persist( new Buddy( "Natalino", "Busa" ) )
entityManager.persist( new Buddy( "Angelina", "Jolie" ) )
entityManager.persist( new Buddy( "Kate", "Moss" ) )
entityManager.getTransaction().commit()
entityManager.getTransaction().begin();
val allBuddies = entityManager.createQuery("From Buddy", classOf[Buddy]).getResultList.toList
entityManager.getTransaction().commit();
allBuddies foreach println
entityManager.close();
}
}
Run Code Online (Sandbox Code Playgroud)
代码非常简单.一旦通过工厂创建JPA EntityManager,数据模型就可以使用hibernate和jpa文档中定义的方法进行插入,删除,查询.
此示例已使用sbt设置.检索必要的包并编译源代码后,运行教程将生成以下日志:
HibernateJpaScalaTutorial:-:1.0.0> run
[info] Running nl.busa.jpa.HibernateJpaScalaTutorial
1 = Natalino Busa
2 = Angelina Jolie
3 = Kate Moss
[success] Total time: 4 s, completed Dec 9, 2012 4:18:00 PM
Run Code Online (Sandbox Code Playgroud)
Scala Query不是Hibernate,但可能很有趣.