gpt4 book ai didi

java - 为什么 hbm2ddl.auto 'update' 属性不起作用或者它是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 02:19:53 26 4
gpt4 key购买 nike

我是 Hibernate 的新手,据我所知,当 hbm2ddl.auto 设置为“更新”时,如果表不存在,它应该创建一个表,如果新的“属性”,它应该自动创建一个新列列的标记已添加到映射文件中。正确的?但是每当我尝试运行我的类时,它都会抛出“表或 View 不存在”而不是创建它。我正在使用 hibernate v5.10

这是我正在尝试运行的 POC 示例。提前致谢。

映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.nt.domain.Customer" table="CUSTOMER">
<id name="custNo" length="10" type="int" column="CUSTNO"/>
<property name="customerName" length="20" type="string" column="CUSTNAME"/>
<property name="billAmt" length="10" type="int" column="BILLAMT"/>
</class>
</hibernate-mapping>

配置

<?xml version="1.0" encoding="UTF-8"?>
<!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">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:sys</property>
<property name="connection.username">Asif123</property>
<property name="connection.password">Asif123</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
<property name="dialect">org.hibernate.dialect.Oracle12cDialect</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/nt/domain/customer.hbm.xml"/>
</session-factory>

主要

package com.nt.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.nt.domain.Customer;

public class UpdateTest {
public static void main(String[] args) {
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session ses= factory.openSession();
Transaction tx= ses.beginTransaction();

Customer customer = new Customer();
customer.setCustNo(101);
customer.setCustomerName("Asif");
customer.setBillAmt(1245);


ses.save(customer);
tx.commit();

ses.close();
factory.close();
}
}

客户

package com.nt.domain;

public class Customer {
int custNo;
String customerName;
int billAmt;

//All getters and setters

}

异常

Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
....

最佳答案

对于仍在寻找答案的人,如果您想体验“更新”属性的所有功能,例如自动表创建、自动添加列(两种情况:如果尚不可用),请选择 5.0.1 .最终版本,是支持它们的最稳定的版本。

关于java - 为什么 hbm2ddl.auto 'update' 属性不起作用或者它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47179449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com