I have Guice for DI. I can inject my repository in the controller (constructor injection):
@ImplementedBy(JPAMyEntityRepository.class)
public interface MyEntityRepository extends EntityRepository<MyEntity> {
}
@Singleton
public class JPAMyEntityRepository implements MyEntityRepository {
.....
}
public class MyEntityController extends BaseController {
private MyEntityRepository myEntityRepository;
@Inject
public MyEntityController(MyEntityRepository myEntityRepo) {
this.myEntityRepository = myEntityRepo; //OK, repo is not null
}
}
But I can't inject the same repository in my entity listener using constructor, I have an exception (there aren't default constructor):
@MappedSuperclass
@EntityListeners(MyEntityListener.class)
public abstract class MyEntity extends OwnedEntity implements Comparable<MyEntity> {
....
}
public class MyEntityListener {
private MyEntityRepository myEntityRepository;
@Inject
public MyEntityListener(MyEntityRepository myEntityRepo){
this.myEntityRepository = myEntityRepo;
}
}
Exception:
....
Caused by: javax.persistence.PersistenceException: Unable to create instance of models.listeners.MyEntityListener as a JPA callback listener
....
Caused by: java.lang.NoSuchMethodException: models.listeners.MyEntityListener.<init>()
And when i try to inject my repo in such approach:
public class MyEntityListener {
@Inject
private MyEntityRepository myEntityRepository; // null
}
I have a null.
Build.sbt file:
import MetamodelGenerator.generateMetamodels
name := """my-app"""
version := "1.2.4-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayJava).settings(sourceGenerators in Compile += generateMetamodels(Seq("models")).taskValue)
scalaVersion := "2.12.2"
libraryDependencies ++= Dependencies.projectDependencies
application.conf file:
# JDBC
db {
default {
driver = org.postgresql.Driver
url = "jdbc:postgresql://localhost:5432/my-app"
schema = myapp
username = "user"
password = "user"
jndiName = DefaultDS
logSql = false
hikaricp {
connectionTestQuery = SELECT 1
minimumIdle = 20
maximumPoolSize = 40
}
}
}
# Point JPA at our database configuration
jpa.default = defaultPersistenceUnit
# Job queue sized to HikariCP connection pool
database.dispatcher {
executor = "thread-pool-executor"
throughput = 1
thread-pool-executor {
fixed-pool-size = 40
}
}