我的SSH,用的是orcale,User表的主键ehrid是varchar2类型的,我想实现自动递增功能。
我的做法是:
1.-- Create sequence
create sequence SEHRID
minvalue 44030000000000000000000
maxvalue 999999999999999999999999999
start with 44030000000000000000000
increment by 1
cache 20;
2.通过触发器来产生.
create or replace trigger tehrid
before insert on user
for each row
declare
begin
select sehrid.nextval into:New.ehrid from dual;
end tehrid;
CREATE TABLE "CITIZEN_BASE_INFO" (
EHRID VARCHAR2(23) NOT NULL,
NAME VARCHAR2(20) NOT NULL,
PWD VARCHAR2(20) NOT NULL
}
POJO
测试类
public class UserDaoTest extends BaseDaoTest {
@Autowired
public IUserDao UserDao;
@Test
public void testFindById()
{
try {
User user=new User();
System.out.println(user);
user.setName("hc");
user.setPwd("123");
this.userDao.save(user);
//[color=red] oracle中能查到记录已插入,记录的ehrid有值[/color]
System.out.println(user.getEhrid());
//[color=red]怎么这里打出来的居然是rowid的值哦?[/color]
} catch (DaoException e) {
e.printStackTrace();
}
}
---------------------------接口--------------
public interface IUserDao
{
public void save(User user);
}
---------------------------实现类------------
public class UserDaoImpl extends HibernateDaoSupport implements IUserDao
{
public void save(User user){
this.getHibernateTemplate().save(user);
this.log.debug("保存市民信息成功!");
}
}
这里是User.hbm.xml文件
[size=large][size=xx-small]请帮忙解答一下哦,谢谢![/size][/size]
[b]问题补充:[/b]
问题是我的主键是varchar2类型的,可以用sequence嘛?
[b]问题补充:[/b]
我试了,还是不行哦,用sequence,我想是因为我主键JAVA类型是String的,
用触发器的时候和表关联的都提示下面这个错误。
ORA-02291: 违反完整约束条件 (SCOTT.FK_MOBILE_C_RELATIONS_CITIZEN_) - 未找到父项关键字
[b]问题补充:[/b]
User.hbm.xml文件写错了!
应该这样
希望有人能帮我想想办法。我想通过触发器来生成业务ID,这个ID是varchar的
但是我保存对象可以保存进去,就是我想得到刚保存的对象生成的ID应该怎么做呢!