Java 为什么hibernate不将更改保存到db?
这是我的配置文件 hibernate.cfg.xmlJava 为什么hibernate不将更改保存到db?,java,hibernate,h2,Java,Hibernate,H2,这是我的配置文件 hibernate.cfg.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibern
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.password">1</property>
<property name="hibernate.connection.url">
jdbc:h2:mem:test3;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="show_sql">true</property>
<property name="hibernate.hbm2ddl.auto"> create </property>
<mapping resource="user.hbm.xml"></mapping>
<mapping resource="role.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
输出为:迪马 迪马 如果我只保存了一个用户,
dao.findAll().size()
给出“1”,长话短说,对数据库的更改不会保存。
为什么会这样
对于findAll(),我使用DriverManager.getConnection()等等
@Override
public List<User> findAll() {
List<User> result = new ArrayList<User>();
try {
connection = createConnection();
connection.setAutoCommit(false);
statement = connection.createStatement();
resultSet = statement.executeQuery(FIND_ALL);
while (resultSet.next()) {
User temp = new User();
temp.setId(resultSet.getLong(8));
temp.setLogin(resultSet.getString(2));
temp.setPassword(resultSet.getString(3));
temp.setEmail(resultSet.getString(4));
temp.setFirstName(resultSet.getString(5));
temp.setLastName(resultSet.getString(6));
temp.setBirthday(resultSet.getDate(7));
Role tempRole = new Role();
JdbcRoleDao jdbcRoleDao = new JdbcRoleDao();
tempRole = jdbcRoleDao.findById(resultSet.getLong("id_role"));
temp.setRole(tempRole);
result.add(temp);
}
} catch (SQLException e) {
myRollback();
log.error(e, e);
throw new RuntimeException(e);
} finally {
close();
}
return result;
}
public Connection createConnection() throws SQLException {
url = "jdbc:h2:mem:test3;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false";// "jdbc:h2:./first";
driver = "org.h2.Driver";
login = "sa";
password = "1";
// init();
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
log.error(e, e);
throw new RuntimeException(e);
}
Connection connection = DriverManager.getConnection(url, login,
password);
RunScript.execute(url, login, password, SCHEMA,
Charset.forName("UTF-8"), false);
return connection;
}
公共类用户{
私人长id;
...
公共字符串getFirstName(){
返回名字;
}
。。。
}
“hibernate.hbm2ddl.auto”创建中的角色类似问题
在每次启动应用程序时创建新的数据库。
必须是“更新”而不是“创建”是否可以发布findAll()代码?执行代码时是否能够在控制台中看到insert查询?请同时放置实体类角色和用户代码?如果使用JDBC从数据库手动提取元素,Hibernate有何用处?检查数据库中插入的值,它们应该在数据库中。您的findAll()方法有问题。
@Override
public List<User> findAll() {
List<User> result = new ArrayList<User>();
try {
connection = createConnection();
connection.setAutoCommit(false);
statement = connection.createStatement();
resultSet = statement.executeQuery(FIND_ALL);
while (resultSet.next()) {
User temp = new User();
temp.setId(resultSet.getLong(8));
temp.setLogin(resultSet.getString(2));
temp.setPassword(resultSet.getString(3));
temp.setEmail(resultSet.getString(4));
temp.setFirstName(resultSet.getString(5));
temp.setLastName(resultSet.getString(6));
temp.setBirthday(resultSet.getDate(7));
Role tempRole = new Role();
JdbcRoleDao jdbcRoleDao = new JdbcRoleDao();
tempRole = jdbcRoleDao.findById(resultSet.getLong("id_role"));
temp.setRole(tempRole);
result.add(temp);
}
} catch (SQLException e) {
myRollback();
log.error(e, e);
throw new RuntimeException(e);
} finally {
close();
}
return result;
}
public Connection createConnection() throws SQLException {
url = "jdbc:h2:mem:test3;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false";// "jdbc:h2:./first";
driver = "org.h2.Driver";
login = "sa";
password = "1";
// init();
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
log.error(e, e);
throw new RuntimeException(e);
}
Connection connection = DriverManager.getConnection(url, login,
password);
RunScript.execute(url, login, password, SCHEMA,
Charset.forName("UTF-8"), false);
return connection;
}
Hibernate: alter table USER drop constraint FK_32nqg51ic2mg57ysalv1wnmdc if exists
Hibernate: drop table ROLE if exists
Hibernate: drop table USER if exists
Hibernate: create table ROLE (id bigint generated by default as identity, name varchar(45) not null, primary key (id))
Sep 29, 2014 7:49:19 PM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: HHH000389: Unsuccessful: alter table USER drop constraint FK_32nqg51ic2mg57ysalv1wnmdc if exists
Sep 29, 2014 7:49:19 PM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: Table "USER" not found; SQL statement:
alter table USER drop constraint FK_32nqg51ic2mg57ysalv1wnmdc if exists [42102-181]
Hibernate: create table USER (id bigint generated by default as identity, login varchar(45) not null, password varchar(45) not null, email varchar(45) not null, first_name varchar(45) not null, last_name varchar(45) not null, birthday date not null, id_role bigint not null, primary key (id))
Hibernate: alter table ROLE add constraint UK_9glod3qre7ighyp4ci4t6fcoy unique (name)
Hibernate: alter table USER add constraint UK_slockai06wyhy7i5c8vnd2o31 unique (login)
Hibernate: alter table USER add constraint UK_oso07pudw19e66bs4yp8hwpux unique (email)
Hibernate: alter table USER add constraint FK_32nqg51ic2mg57ysalv1wnmdc foreign key (id_role) references ROLE
Sep 29, 2014 7:49:19 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
Hibernate: insert into ROLE (id, name) values (null, ?)
546
546
Hibernate: insert into USER (id, login, password, email, first_name, last_name, birthday, id_role) values (null, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into USER (id, login, password, email, first_name, last_name, birthday, id_role) values (null, ?, ?, ?, ?, ?, ?, ?)
dima
dima
....
public String getPassword() {
return password;
}
public void setBirthday(Date arg0) {
birthday = arg0;
}
public void setFirstName(String arg0) {
firstName = arg0;
}