gpt4 book ai didi

java - hibernate 4 : saveOrUpdate exception

转载 作者:太空宇宙 更新时间:2023-11-04 14:43:06 25 4
gpt4 key购买 nike

我正在使用 Hibernate4 和 Spring 3。

Hibernate 不会更新,而是始终尝试插入。

我的实体类:

@Entity
@Table(name="APP_SERVER")
public class ServerEntity {

@Id
@GeneratedValue(generator="seq_item", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name="seq_item",sequenceName="SEQ_APP_SERVER")
@Column(name="APP_SERVER_KEY")
private int app_server_key;

@Column(name="SYS_ID" , unique=true)
private String sys_id;
@Column(name="SERVER_NAME")
private String server_name;
}

我的服务类别:

@Service("ServerService")
public class ServerServiceImpl implements ServerService{

// other code
@Override
@Transactional
public void addServer(ServerEntity server) {
serverDao.addServer(server);

}
}

道类:

@Repository("ServerDao")
public class ServerDaoImpl implements ServerDao {
@Override
public void addServer(ServerEntity server) {
try{
this.sessionFactory.getCurrentSession().saveOrUpdate(server);
}catch (Exception e) {
e.printStackTrace();
}
}
}

其他类:

ServerEntity serverEntity = new ServerEntity();
serverEntity.setSys_id((result.getSysId()));
serverEntity.setServer_name(result.getName());

ServerService serverService = (ServerService)
applicationContext.getBean("ServerService");
serverService.addServer(serverEntity);

表:

  CREATE TABLE "APP_SERVER" 
( "APP_SERVER_KEY" NUMBER NOT NULL ENABLE,
"CMDB_SYS_ID" VARCHAR2(64) NOT NULL UNIQUE ENABLE ,
"SERVER_NAME" VARCHAR2(255) NOT NULL ENABLE,
PRIMARY KEY ("APP_SERVER_KEY") ENABLE
) ;

异常即将到来:

05:36:40,292 INFO  [STDOUT] Hibernate: insert into USER.APP_SERVER (SYS_ID,SERVER_NAME) values (?, ?)
05:36:40,558 INFO [STDOUT] WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1, SQLState: 23000
05:36:40,558 INFO [STDOUT] ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ORA-00001: unique constraint (USER.APP_SERVER_UK1) violated
05:36:40,684 INFO [STDOUT] Exception occured... org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [OIMUSER.SPP_SERVER_UK1]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

这就是为什么 hibernate 是插入而不是更新。 sys_id 已经存在于数据库中,在这里我希望 hibernate 更新它,因为 sys-id 已经存在。

需要更改哪些代码。请提出建议。

最佳答案

你可以尝试这样的事情

Student ss = new Student();
Student get = (Student) s.load(Student.class, new Long(id));
get.setDegree(newDegree);
tx.commit();

如果您的对象处于持久状态,则加载对象的代理并对其进行操作。一旦操作完成,就提交事务。您的对象会由 hibernate 自动更新。

看看 Hibernate Load() Example

关于java - hibernate 4 : saveOrUpdate exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24734116/

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