Grails 中没有默认值异常

Posted

技术标签:

【中文标题】Grails 中没有默认值异常【英文标题】:Does not have default value exception in Grails 【发布时间】:2017-07-01 00:53:13 【问题描述】:

我无法向我的 DbUser.groovy 域类插入任何数据。当我调用以下方法时。

	def insertDbuserDetails(Map Hmap)
		try
			def emp = Employee.get(Hmap.get("empId"))
			if(emp)
			def Username = springSecurityService.getPrincipal().getUsername()
			def row = DbUser.findByEmployee(emp)
			if(!row)
			def data = new DbUser(employee:emp,username:Hmap.get("userName"),password:Hmap.get("password"),client:Hmap.get("client"),create_id:Username,create_dt:new Date(),mod_id:null,mod_dt:null)
			data.save(failOnError: true)
			return data
			else
			return "exist"
			
		  else
		  return "invalid"
		  
		
			catch(Exception e)
			println("Exception in getDbuserDetails() of DbuserService.groovy: "+e);
			
		

它给了我一个类似

的错误

错误 | 2017-02-10 18:44:08,307 [http-bio-8080-exec-4] 错误 spi.SqlExceptionHelper - 字段“员工”没有默认值 DbuserService.groovy 的 getDbuserDetails() 中的异常:org.springframework.dao.DataIntegrityViolationException:休眠操作:无法执行语句; SQL [不适用];字段“员工”没有默认值;嵌套异常是 java.sql.SQLException: Field 'employee' doesn't have a default value

错误 | 2017-02-10 18:44:08,328 [http-bio-8080-exec-4] ERROR hibernate.AssertionFailure - HHH000099:发生断言失败(这可能表明 Hibernate 中存在错误,但更有可能是由于不安全使用会话):org.hibernate.AssertionFailure: com.domain.gcg.DbUser 条目中的空 id(发生异常后不要刷新会话)

错误 | 2017-02-10 18:44:08,469 [http-bio-8080-exec-4] 错误错误。GrailsExceptionResolver - 处理请求时发生 AssertionFailure:[POST] /UserManagement/dbuser/addDbuserDetails - 参数: 重新密码:pass123 客户端:testclient 密码:pass123 雇员编号:SE357 empName: Abhilash Shajan 用户名:Abhi123 com.domain.gcg.DbUser 条目中的空 id(发生异常后不要刷新会话)。堆栈跟踪如下: 消息:com.domain.gcg.DbUser 条目中的空 id(发生异常后不要刷新 Session)

这是我的 DbUser.groovy 域类

class DbUser 
		
	Employee employee
	String client
	String username
	String password
	String create_id
	Date create_dt
	String mod_id
	Date mod_dt
	
	static mapping = 
		version true
		dynamicUpdate true
		password type: GormEncryptedStringType
                employee column: '`employee`',generator: 'foreign', params: [ property: 'employee'], insertable: false, updateable: false
   

	static constraints = 
		mod_id(nullable: true)
		mod_dt(nullable: true)
	

有人可以帮我吗?

【问题讨论】:

这个问题和以前一样。您是否按照我的建议尝试重新创建数据库? (只需删除所有表并重新运行 grails 应用程序并让它再次创建表。 @MikelisBaltruks 我删除了我的数据库并创建了一个新数据库,但问题仍然存在。 :-( 【参考方案1】:

检查您的映射,您在员工字段上有 insertable 和 updateable = false 并且您正在尝试更新此字段。

【讨论】:

这是我的问题!很好的答案。

以上是关于Grails 中没有默认值异常的主要内容,如果未能解决你的问题,请参考以下文章

在 Grails 域类中设置日期字段的默认值

如何在 Grails 2.2 中设置域类值的默认值?

如何使用用户定义的函数为 grails 中的域类变量设置默认值

如何在 Grails 域类中正确设置属性值

尝试连接用户时出现休眠异常 - 字段“用户名”没有默认值

如何覆盖 Grails 中的默认错误消息?