42 lines
1.4 KiB
Scala
42 lines
1.4 KiB
Scala
package di
|
|
|
|
import com.google.inject.{Inject, Provider}
|
|
import jakarta.inject.Singleton
|
|
import jakarta.persistence.{EntityManager, EntityManagerFactory, Persistence}
|
|
import play.api.Configuration
|
|
|
|
@Singleton
|
|
class EntityManagerProvider @Inject()(config: Configuration) extends Provider[EntityManager] {
|
|
|
|
private val emf: EntityManagerFactory = {
|
|
val dbConfig = config.get[Configuration]("db.default")
|
|
val props = new java.util.HashMap[String, Object]()
|
|
|
|
// Map Play configuration to Jakarta Persistence properties
|
|
props.put("jakarta.persistence.jdbc.driver", dbConfig.get[String]("driver"))
|
|
props.put("jakarta.persistence.jdbc.url", dbConfig.get[String]("url"))
|
|
props.put("jakarta.persistence.jdbc.user", dbConfig.get[String]("username"))
|
|
props.put("jakarta.persistence.jdbc.password", dbConfig.get[String]("password"))
|
|
|
|
// Also pass HikariCP settings if present
|
|
dbConfig.getOptional[Configuration]("hikaricp").foreach { hikariConfig =>
|
|
hikariConfig.keys.foreach { key =>
|
|
val value = hikariConfig.underlying.getValue(key).unwrapped()
|
|
props.put(s"hibernate.hikari.$key", value)
|
|
}
|
|
}
|
|
|
|
Persistence.createEntityManagerFactory("defaultPersistenceUnit", props)
|
|
}
|
|
|
|
override def get(): EntityManager = {
|
|
emf.createEntityManager()
|
|
}
|
|
|
|
def close(): Unit = {
|
|
if (emf.isOpen) {
|
|
emf.close()
|
|
}
|
|
}
|
|
}
|