Thanks very much Dimas. Your help is much appreciated! 1) That indeed worked! Thank you!
2) That looks like what I want, but I might not be doing it right. In my real server, after Hibernate is initialized, I call H2's RunScript to manually load the schema, and everything works fine. When I try the same thing in my tests (by loading the schema in a @BeforeEach method), H2 throws because some of the tables already exist. Do you know why there is a difference? I imagine that eventually I will want to remove my explicit schema, but right now it's nice to confirm that the one generated by Hibernate matches the one I already have. On Sun, Aug 23, 2020 at 9:46 AM Dimas Guardado <[email protected]> wrote: > For 2) I just noticed that dropwizard-example has some sample code > demonstrating how to configure your DAO test to talk to a live database: > https://github.com/dropwizard/dropwizard/blob/v2.0.12/dropwizard-example/src/test/java/com/example/helloworld/db/PersonDAOIntegrationTest.java#L35 > > On Saturday, August 22, 2020 at 10:36:18 PM UTC-7 Dimas Guardado wrote: > >> Hi Aditya, >> >> 1) The reason the second `createQuery` call fails is because it is using >> a *different* session from the one you created in the initial `try` line. >> This is because `DaoTestExtension` opens a session and binds it to >> `getCurrentSession()` before every test method runs: >> https://github.com/dropwizard/dropwizard/blob/v2.0.12/dropwizard-testing/src/main/java/io/dropwizard/testing/common/DAOTest.java#L146 >> . The first `createQuery` runs against the `try` session which has a >> transaction, while the second runs against the `DAOTest` session which has >> no knowledge of the transaction you created. I haven't tested this myself, >> but I expect you use `sessionFactory.getCurrentSession()` everywhere in >> your test instead of creating your own session, it'll work the way you >> expect. The only other note would be that the framework and testing tools >> are set up to use hibernate within the context of a DAO class. I expect >> it'll be easier for both your app code and your test code to keep hibernate >> calls in one of those classes: >> https://www.dropwizard.io/en/latest/manual/hibernate.html#data-access-objects >> >> 2) It looks like DAOTestExtension.Builder has a number of builder methods >> that allow you to set up database access properties for hibernate. >> https://github.com/dropwizard/dropwizard/blob/v2.0.12/dropwizard-testing/src/main/java/io/dropwizard/testing/common/DAOTest.java#L35 >> >> Can you give those suggestions a try and let me know if they work for you? >> >> On Friday, August 21, 2020 at 10:30:28 AM UTC-7 Aditya Prasad wrote: >> >>> Hi all, >>> >>> I'm having some difficulties making Hibernate work in DropWizard. I'm >>> new to both Hibernate and DW, so I apologize if my questions are stupid. >>> >>> I set up my tests like so: >>> >>> @ExtendWith(DropwizardExtensionsSupport.class) >>> public class UpdateTest { >>> private SessionFactory sessionFactory; >>> >>> public DAOTestExtension database = DAOTestExtension.newBuilder() >>> .addEntityClass(Foo.class) >>> .build(); >>> >>> @BeforeEach >>> public void setup() { >>> sessionFactory = database.getSessionFactory(); >>> } >>> >>> There are a few things I'm not understanding. >>> >>> 1) I can't use this SessionFactory as I normally would. The first of >>> these createQuery calls succeeds, and the second fails (with "Calling >>> method 'createQuery' is not valid without an active transaction"): >>> >>> try (Session session = sessionFactory.openSession()) { >>> Transaction transaction = session.beginTransaction(); >>> session.createQuery(...).executeUpdate(); >>> sessionFactory.getCurrentSession().createQuery(...).executeUpdate(); >>> transaction.commit(); >>> } >>> >>> I understand that I'm *supposed* to use database.inTransaction(), but I >>> don't understand why the above fails. Maybe this won't matter so much once >>> I get used to it. >>> >>> 2) I can't figure out whether it's possible to set up config. For >>> example, can I configure the driver, jdbc URL, dialect, etc? Or is there no >>> way to connect to a real db? Maybe I'm mixing concerns here, but I'd like >>> my DAO tests to also test things like db constraints. >>> >>> Normally this can be done with (org.hibernate.cfg.)Configuration or >>> (io.dropwizard.db.)DataSourceFactory, but I don't think I can do that here. >>> Or it can be done through a hibernate.cfg.xml or hibernate.properties, but >>> Hibernate doesn't find hibernate.cfg.xml, and loads but doesn't use >>> settings from hibernate.properties. >>> >>> Thanks, >>> Aditya >>> >> -- > You received this message because you are subscribed to the Google Groups > "dropwizard-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/dropwizard-user/72ad0ab3-399f-4dd8-8f80-2441b9c24de3n%40googlegroups.com > <https://groups.google.com/d/msgid/dropwizard-user/72ad0ab3-399f-4dd8-8f80-2441b9c24de3n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "dropwizard-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/dropwizard-user/CAMx7i44FEZr3%3DDQ4k%3DKe9vMdXxG-n6Q%2Bo%3D1BpEbowyAaeoau7A%40mail.gmail.com.
