我在休眠中尝试了简单的程序,发现了一堆异常。
我想不出到底哪里出了问题。
我有三门课--图书、读者和使用。最后一个是将前两个绑定为一对多依赖关系。
这是我的main()
:
public class Appl {
public static void main(String[] args) {
Book book = new Book();
book.setTitle("book01155");
//
Reader reader = new Reader();
reader.setName("reader2");
//
Using using = new Using();
using.setIdBook(book);
using.setIdReader(reader);
//
List<Book> elements = new ArrayList<Book>();
//
Session session = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(book);
session.save(reader);
session.save(using);
elements = session.createCriteria(Book.class).list();
session.getTransaction().commit();
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
for (Book b : elements) {
System.out.println("book: id=" + b.getIdBook() + " Title="
+ b.getTitle());
}
System.out.println("\nThe END.\n");
}
}
以下是例外消息:
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USING (IDBOOK, IDREADER) values (2, 2)' at line 1
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute statement
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
hiberante.cfg.xml
的代码片段:
<hibernate-configuration>
<session-factory>
<property name="eclipse.connection.profile">097Hibernate</property>
<property name="connection.url">jdbc:mysql://localhost/_097_Library</property>
<property name="connection.username">root</property>
<property name="connection.password">secret</property>
<!-- property name="hbm2ddl.auto">create</property -->
<property name="hbm2ddl.auto">update</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<mapping class="com.softserve.edu.Book" />
<mapping class="com.softserve.edu.Reader" />
<mapping class="com.softserve.edu.Using" />
</session-factory>
</hibernate-configuration>
数据库中的所有表都已创建,但为空。一切看起来都很好。有什么建议吗?
- 如何解决这个问题?*
4条答案
按热度按时间bd1hkmkf1#
在MySQL中使用是reserved word。
因此,只需在
Using
实体上使用@javax.persistence.Table
注解来重命名该表。像这样的东西我假设您有一个用于
USING
的表,但您提到它是一对多关系,因此可以省略该表,只使用Reader
表中的单个外键对其建模。顺便说一句,Hibernate不会强迫您为多对多连接表(除了外键之外没有任何其他属性)创建新的实体。但我认为,为这种关系建立一个实体是一种很好的做法,因为在大多数情况下,将来会为这种关系定义一些属性。
wswtfjt72#
该问题可能是MySQL 5.x的MySQL版本冲突的结果,请使用org.hibernate.Dialt.MySQL5Dialect,然后对于任何其他版本,请使用org.hibernate.Dialt.MySQLDialect
修改了您的hibernate.cfg.xml或.properties文件
Org.hibernate.dialect.MySQL5Dialect
vfwfrxfs3#
正如阿米尔指出的那样,有保留的词,不仅在MySQL中,在Hibernate中也是如此。
请参见:
Reserved Words, Hibernate / JPA
bq8i3lrv4#
在我的例子中,科隆的名字在甲骨文和课堂上是不同的。我把它们做了一样之后,它就解决了。