Hibernate 保存数据时报错:ids for this class must be....

南猿北蛰 2014-01-08 10:34:23
SSH项目,hibernate配置实体采用注解方式,主键是程序自己生成的,配置如下:
@Id
@Column(name = "serialno", unique = true, nullable = false, length = 15)
public String getSerialno() {
return this.serialno;
}

保存数据时偶尔会报如下错误:

nested exception is org.hibernate.id.IdentifierGenerationException ;
ids for this class must be manually assigned before calling save():

在网上找了一下解决办法,没有解决。

请高手解答一下。
...全文
9184 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolbamboo2008 2014-01-08
  • 打赏
  • 举报
回复
引用 9 楼 jackwumengfeng 的回复:
[quote=引用 7 楼 coolbamboo2008 的回复:] [quote=引用 5 楼 jackwumengfeng 的回复:] [quote=引用 2 楼 coolbamboo2008 的回复:] 你是不是用的oracle数据库啊 貌似oracle那个主键是要自己手动解决的
sqlserver的[/quote] 那要加这个了@GeneratedValue,你没给id设定取得方式 [/quote] id是自己生成的String类型,加了这句@GeneratedValue报错[/quote] 如果你是用自己生成的id的话, 那应该用@GeneratedValue中的assigned, 然后你自己要记着在save、update之前一定保证给id赋值
  • 打赏
  • 举报
回复
该id已经存在了吧。
南猿北蛰 2014-01-08
  • 打赏
  • 举报
回复
引用 8 楼 fangmingshijie 的回复:
[quote=引用 6 楼 jackwumengfeng 的回复:] [quote=引用 3 楼 fangmingshijie 的回复:] 加上@GeneratedValue看看
@GeneratedValue是不是表示默认的auto[/quote]这个是int型自增,string类型的,你可能要写代码区实现。 先改为@GeneratedValue(strategy = GenerationType.AUTO) 看看吧[/quote] 改成这样报错: could not insert: [com.***]; nested exception is org.hibernate.exception.ConstraintViolationException:
南猿北蛰 2014-01-08
  • 打赏
  • 举报
回复
引用 7 楼 coolbamboo2008 的回复:
[quote=引用 5 楼 jackwumengfeng 的回复:] [quote=引用 2 楼 coolbamboo2008 的回复:] 你是不是用的oracle数据库啊 貌似oracle那个主键是要自己手动解决的
sqlserver的[/quote] 那要加这个了@GeneratedValue,你没给id设定取得方式 [/quote] id是自己生成的String类型,加了这句@GeneratedValue报错
  • 打赏
  • 举报
回复
引用 6 楼 jackwumengfeng 的回复:
[quote=引用 3 楼 fangmingshijie 的回复:] 加上@GeneratedValue看看
@GeneratedValue是不是表示默认的auto[/quote]这个是int型自增,string类型的,你可能要写代码区实现。 先改为@GeneratedValue(strategy = GenerationType.AUTO) 看看吧
coolbamboo2008 2014-01-08
  • 打赏
  • 举报
回复
引用 5 楼 jackwumengfeng 的回复:
[quote=引用 2 楼 coolbamboo2008 的回复:] 你是不是用的oracle数据库啊 貌似oracle那个主键是要自己手动解决的
sqlserver的[/quote] 那要加这个了@GeneratedValue,你没给id设定取得方式
南猿北蛰 2014-01-08
  • 打赏
  • 举报
回复
引用 3 楼 fangmingshijie 的回复:
加上@GeneratedValue看看
@GeneratedValue是不是表示默认的auto
南猿北蛰 2014-01-08
  • 打赏
  • 举报
回复
引用 2 楼 coolbamboo2008 的回复:
你是不是用的oracle数据库啊 貌似oracle那个主键是要自己手动解决的
sqlserver的
南猿北蛰 2014-01-08
  • 打赏
  • 举报
回复
引用 1 楼 zhangchengtest 的回复:
@SequenceGenerator 有这么一个注解 你在网上查查
sqlserver的
  • 打赏
  • 举报
回复
加上@GeneratedValue看看
coolbamboo2008 2014-01-08
  • 打赏
  • 举报
回复
你是不是用的oracle数据库啊 貌似oracle那个主键是要自己手动解决的
zhangchengtest 2014-01-08
  • 打赏
  • 举报
回复
@SequenceGenerator 有这么一个注解 你在网上查查
南猿北蛰 2014-01-08
  • 打赏
  • 举报
回复
引用 12 楼 coolbamboo2008 的回复:
[quote=引用 9 楼 jackwumengfeng 的回复:] [quote=引用 7 楼 coolbamboo2008 的回复:] [quote=引用 5 楼 jackwumengfeng 的回复:] [quote=引用 2 楼 coolbamboo2008 的回复:] 你是不是用的oracle数据库啊 貌似oracle那个主键是要自己手动解决的
sqlserver的[/quote] 那要加这个了@GeneratedValue,你没给id设定取得方式 [/quote] id是自己生成的String类型,加了这句@GeneratedValue报错[/quote] 如果你是用自己生成的id的话, 那应该用@GeneratedValue中的assigned, 然后你自己要记着在save、update之前一定保证给id赋值[/quote] 主键生成策略中默认就是@GeneratedValue(strategy = GenerationType.AUTO) 也就是 @Id 等同于 @Id @GeneratedValue(strategy = GenerationType.AUTO)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧