我使用grails GORM进行数据库映射,使用oracle作为已经填充了值的数据库。我的问题是我可以在域类中定义一个新的约束,例如外键,即使它没有在我的遗产中的基础表中定义db?grails app仍然会接受约束吗?约束不必与数据库的那些完全匹配吗?
答案 0 :(得分:1)
您可以定义类的属性,这些属性不会保存在数据库中,并且由于这不需要在数据库中表示这些属性定义如下:
class Person {
String name
static transients = ['name']
}
查看有关transients的信息。在2.x中,瞬态不会自动绑定在文档here中,因此您必须明确地执行bindable: true
。
答案 1 :(得分:0)
是的,无论您在数据库中拥有什么,您在域类中定义的约束都将得到尊重。 2真正关联的唯一时间是你是否让Hibernate为你生成DDL(大多数人不为他们的生产环境做),在这种情况下,某些约束会影响生成的DDL。既然你已经拥有了一个数据库,你几乎肯定会关闭它。
修改强>
影响DDL的约束示例是size
约束。如果使用size: 5..15
之类的约束字符串字段,则默认情况下生成的DDL将创建一个15个字符宽的列。如果您不允许应用程序生成DDL,则在验证时仍然应用约束,并且如果属性超过15个字符或少于5个,则验证将失败。一旦验证通过并且数据被发送到数据库,框架就会假设一切都会正常。如果不是,则可能抛出相应的异常。例如,如果String有12个字符,它将在应用程序中通过验证并将发送到数据库。如果数据库列只有8个字符宽,那么您将获得SQLException。我希望这是有道理的。