我想使用hibernate从java对象创建表,但出现以下错误:
org.hibernate.exception.sqlgrammareexception:无法在database.starter.main(starter)上执行语句<27 internal call>。java:51)<5内部调用>原因:java.sql.sqlsyntaxerrorexception:表“cube.products”不存在
它不应该给我这个错误,因为表不应该在那里。下面是我的hibernate.cfg.xml:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/cube</property>
<property name="connection.username">user</property>
<property name="connection.password">pass</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<mapping class="database.Product" />
</session-factory>
</hibernate-configuration>
下面是我的产品类(没有getter和setter,避免插入太多代码):
package database;
import javax.persistence.*;
@Entity
@Table(name = "products")
public class Product {
@Id
@Column(name = "product_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name", length = 128, nullable = true, unique = false)
private String name;
@Column(name = "price", precision = 10, scale = 2)
private float price;
@Column(name = "enabled", columnDefinition = "tinyint default 1")
private boolean enabled;
@Column(length = 512, nullable = true)
private String description;
下面是名为starter的主类:
package database;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import java.util.List;
public class Starter {
public static void main(String args[]) {
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure("hibernate.cfg.xml")
.build();
try {
SessionFactory factory = new MetadataSources(registry)
.buildMetadata().buildSessionFactory();
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();
Product product = new Product();
product.setName("iPhone 7 Plus");
product.setDescription("A good smartphone");
product.setPrice(1299.89f);
product.setEnabled(true);
session.save(product);
transaction.commit();
session.close();
factory.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
StandardServiceRegistryBuilder.destroy(registry);
}
}
}
我希望有人能帮我,因为我真的不知道该多尝试些什么。我问这个问题是为了分散注意力。
2条答案
按热度按时间7nbnzgx91#
我解决了,问题是我的hibernate.cfg.xml的一个属性,来自:
对此:
总的来说,我试图不保存产品,它给了我另一个sql错误,帮助我找到了哪里出了问题。
p4rjhz4m2#
当您看到行
这意味着您的计算机上安装了一个名为“cube”的数据库。你在这么做吗?
如果您的计算机上运行着数据库,那么您应该检查是否创建了名为“products”的表
错误出现在尝试访问表cube.products时
所以在你的产品课上,
使用注解时
@Table(name="products")
这意味着您已经有了一个表。所以你应该试着首先运行代码来创建表
使用hibernate crud操作运行项目