Hibernate无法生成id
Hibernate can't generate id
我使用 hibernate (+ hibernate entitymanager) 5、hsqldb 1.8(仅用于测试)以及 junit 4 在我的 IntelliJ IDEA 上创建了一个新项目。
我有我的测试class
UserRoundRelationsTest
EntityManagerFactory emf;
EntityManager em;
Date currentDate;
User user;
Round round1;
Round round2;
还有一些@After 和@Before 方法:
@Before
public void saveDummyUserAndTwoDummyRounds() {
emf = Persistence.createEntityManagerFactory("testPersistence");
em = emf.createEntityManager(); // Retrieve an application managed entity manager
currentDate = new Date();
user = new User.UserBuilder("alias").fullName("Full Name").phoneNumber("Phone Number").height(100).weight(100).birthDate(currentDate).build();
round1 = new Round(new GameMode(1, ButtonTargetStrategy.RANDOM, ButtonSkipStrategy.SKIP_ON_MISTAKE));
round2 = new Round(new GameMode(2, ButtonTargetStrategy.RANDOM, ButtonSkipStrategy.SKIP_ON_MISTAKE));
round1.setUser(user);
round2.setUser(user);
HashSet<Round> rounds = new HashSet<Round>(2);
rounds.add(round1);
rounds.add(round2);
em.getTransaction().begin();
user.setRounds(rounds);
em.persist(user);
em.persist(round1);
em.persist(round2);
em.flush();
em.getTransaction().commit();
}
和
@After
public void deleteData() {
em.remove(user);
em.remove(round2);
em.remove(round2);
em.getTransaction().commit();
em.close();
emf.close();
}
首先,当我尝试 运行 测试时,hibernate 无法找到 User 和 Round classes 的表,以及它们所依赖的所有内容(a class 例如称为 ButtonPress)。我假设这是由于我在 persistence.xml
配置的自动创建删除所致
<persistence-unit name="testPersistence">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.carloworks.model.User</class>
<class>com.carloworks.model.Round</class>
<class>com.carloworks.model.ButtonPress</class>
<properties>
<!--<property name="hibernate.archive.autodetection" value="class,hbm"></property>-->
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"></property>
<property name="hibernate.show_sql" value="true"></property>
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"></property>
<property name="hibernate.connection.username" value="sa"></property>
<property name="hibernate.connection.password" value=""></property>
<property name="hibernate.connection.url"
value="jdbc:hsqldb:mem:buttonMasherModelsTestDb;MV_STORE=FALSE;MVCC=FALSE"></property>
<!--<property name="hibernate.default_schema" value="buttonMasherModelsTestDb"/>-->
<property name="hibernate.hbm2ddl.auto" value="create-drop"></property>
</properties>
</persistence-unit>
进一步向下滚动错误日志,我也在这一行收到错误:
em.persist(user);
null identifier (plus 'This function is not supported'/'GenericJDBCException: could not prepare statement').
我做错了什么?
该项目也可用于 Github
完整 Error Log
将版本更改为最新版本解决了问题
*有些人可能会遇到路径中断错误(由 maven 引起)。如果您使用的是 intelliJ,请导航至项目设置 -> 模块并修复 "Problems" 选项卡下的任何问题。
我使用 hibernate (+ hibernate entitymanager) 5、hsqldb 1.8(仅用于测试)以及 junit 4 在我的 IntelliJ IDEA 上创建了一个新项目。
我有我的测试class
UserRoundRelationsTest
EntityManagerFactory emf;
EntityManager em;
Date currentDate;
User user;
Round round1;
Round round2;
还有一些@After 和@Before 方法:
@Before
public void saveDummyUserAndTwoDummyRounds() {
emf = Persistence.createEntityManagerFactory("testPersistence");
em = emf.createEntityManager(); // Retrieve an application managed entity manager
currentDate = new Date();
user = new User.UserBuilder("alias").fullName("Full Name").phoneNumber("Phone Number").height(100).weight(100).birthDate(currentDate).build();
round1 = new Round(new GameMode(1, ButtonTargetStrategy.RANDOM, ButtonSkipStrategy.SKIP_ON_MISTAKE));
round2 = new Round(new GameMode(2, ButtonTargetStrategy.RANDOM, ButtonSkipStrategy.SKIP_ON_MISTAKE));
round1.setUser(user);
round2.setUser(user);
HashSet<Round> rounds = new HashSet<Round>(2);
rounds.add(round1);
rounds.add(round2);
em.getTransaction().begin();
user.setRounds(rounds);
em.persist(user);
em.persist(round1);
em.persist(round2);
em.flush();
em.getTransaction().commit();
}
和
@After
public void deleteData() {
em.remove(user);
em.remove(round2);
em.remove(round2);
em.getTransaction().commit();
em.close();
emf.close();
}
首先,当我尝试 运行 测试时,hibernate 无法找到 User 和 Round classes 的表,以及它们所依赖的所有内容(a class 例如称为 ButtonPress)。我假设这是由于我在 persistence.xml
配置的自动创建删除所致<persistence-unit name="testPersistence">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.carloworks.model.User</class>
<class>com.carloworks.model.Round</class>
<class>com.carloworks.model.ButtonPress</class>
<properties>
<!--<property name="hibernate.archive.autodetection" value="class,hbm"></property>-->
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"></property>
<property name="hibernate.show_sql" value="true"></property>
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"></property>
<property name="hibernate.connection.username" value="sa"></property>
<property name="hibernate.connection.password" value=""></property>
<property name="hibernate.connection.url"
value="jdbc:hsqldb:mem:buttonMasherModelsTestDb;MV_STORE=FALSE;MVCC=FALSE"></property>
<!--<property name="hibernate.default_schema" value="buttonMasherModelsTestDb"/>-->
<property name="hibernate.hbm2ddl.auto" value="create-drop"></property>
</properties>
</persistence-unit>
进一步向下滚动错误日志,我也在这一行收到错误:
em.persist(user);
null identifier (plus 'This function is not supported'/'GenericJDBCException: could not prepare statement').
我做错了什么?
该项目也可用于 Github
完整 Error Log
将版本更改为最新版本解决了问题 *有些人可能会遇到路径中断错误(由 maven 引起)。如果您使用的是 intelliJ,请导航至项目设置 -> 模块并修复 "Problems" 选项卡下的任何问题。