程序运行中的Dropwizard会话

use*_*mda 1 java session dao hibernate dropwizard

我试图坚持dropwizard应用程序启动的时间.

public class Main Application extends Application<MainConfiguration> {
private final HibernateBundle<DeployerConfiguration> hibernate = new       HibernateBundle<AppConfiguration>(App.class) {

public DataSourceFactory getDataSourceFactory(
        AppConfiguration configuration) {
    return configuration.getDataSourceFactory();
}


    @Override
    public void initialize(Bootstrap<AppConfiguration> bootstrap) {
    bootstrap.addBundle(hibernate);

public static void main() {
   final AppDAO ddao = new AppDAO(hibernate.getSessionFactory());
   App app = new App(new Date());
  adao.create(app);
Run Code Online (Sandbox Code Playgroud)

物体:

JsonIgnoreProperties(ignoreUnknown = true)
@Entity
@Table(name = "app")

@NamedQuery(name = "App.findAll", query = "SELECT d FROM App d")

public class App implements  Serializable{

  private static final long serialVersionUID = 1L;
  AppDAO adao;
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  long id;


@JsonProperty
Date started;


public App ( Date started) {
    this.started = started;
Run Code Online (Sandbox Code Playgroud)

}

DAO对象

 public class AppDAO extends  AbstractDAO<Appr>  {
 public SessionFactory sessionFactory;

 public AppDAO(SessionFactory sessionFactory) {
    super(sessionFactory);
 }

public Session session;
public App create(App app) {
  return persist(app);
Run Code Online (Sandbox Code Playgroud)

}

当我尝试在main()方法中保存此对象时,它会抱怨没有与该对象关联的会话.在调试时,它将DAO对象赋予null,这是真的,因为尚未创建用户会话.在这种情况下,如何持久保存对象?我错过了什么

小智 5

仅当您在资源方法中使用DAO注释为@UnitOfWork时,Dropwizard才会自动管理会话

文档在这里

如果要在此范围之外使用DAO,则需要手动创建和管理会话,这非常简单:

Session session = hibernate.getSessionFactory().openSession();
ManagedSessionContext.bind(session);
//do your stuff....
session.close();
Run Code Online (Sandbox Code Playgroud)