我正面临着关于Grails继承的问题.我有一个域类Person.grooy:
class Person{
String name
String contactNumber
Address address
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在为员工和客户扩展Person.groovy,如:
class Employee extends Person{
String designation
}
class Customer extends Person{
String interest
}
Run Code Online (Sandbox Code Playgroud)
现在我想在我的数据库中为Employee和Customer提供单独的表,其中包含Person列,即name,contactNumber和associate address key.我怎么能实现这一点.我搜索过每一个地方,但这方面没什么.这种方法在GORM中是不可能的吗?请回答.多谢你们
如何从域对象或静态范围获取Config.groovy信息?我现在正在使用ConfigurationHolder.config.*,但是这个和ApplicationHolder已被弃用,所以我想'做对'...但是grailsApplication对象在DO /静态范围内不可用.
我有一个Groovy/Grails网站,用于通过JSON向Android客户端发送数据.我创建了Android客户端和Groovy/Grails网站; 并且他们可以在JSON中输出相同的对象.
我可以通过将JSON输出映射到Java对象来成功在Android中创建相应的对象,但我想知道是否可以使用JSON输出在Groovy/Grails中创建新的域对象?有没有办法将JSON输出传递给控制器动作,以便创建对象?
这是我要发送的JSON示例;
{
"class":"org.icc.callrz.BusinessCard.BusinessCard",
"id":1,
"businessCardDesigns":[],
"emailAddrs":[
{
"class":"org.icc.callrz.BusinessCard.EmailAddress",
"id":1,
"address":"chris@krslynx.com",
"businessCard":{
"_ref":"../..",
"class":"org.icc.callrz.BusinessCard.BusinessCard"
},
"index":0,
"type":{
"enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType",
"name":"H"
}
},
{
"class":"org.icc.callrz.BusinessCard.EmailAddress",
"id":2,
"address":"cb@i-cc.cc",
"businessCard":{
"_ref":"../..",
"class":"org.icc.callrz.BusinessCard.BusinessCard"
},
"index":1,
"type":{
"enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType",
"name":"W"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
"类"与我要保存的域匹配,ID是域的ID,然后businessCardDesigns和emailAddrs中的每个项目都需要使用类似方法保存(在域中,businessCardDesigns和emailAddrs是ArrayLists ).提前谢谢了!
解:
@RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json")
public ResponseEntity<String> createFromJson(@RequestBody String json) {
Owner.fromJsonToOwner(json).persist();
return new ResponseEntity<String>(HttpStatus.CREATED);
}
Run Code Online (Sandbox Code Playgroud) 在Grails 1.3.7中,我根据Burt在http://www.infoq.com/presentations/GORM-Performance中的建议花了很长时间来转换我的域类关系.
现在,Grails 2支持Hibernate的包,我正在考虑将我的更改恢复为hasMany/ belongsTo.
请注意,应用程序将在多年内看到长期改进(因此没有"部署即忘记":).
更新:一个主要问题是,如果我在应用程序上线后进行了更改,那么在数据库中手动更改会产生多少麻烦.目前尚未发布,所以在Go-Live之前它是合理的.
更新:答案
在2011年11月的博客文章" Grails 2.0中的Hibernate Bags "中,Burt Beckwith描述了Grails 2中的Bags问题并得出结论:
所以我想我已经回过头来提倡早先的谈话了.不要在Author类中映射Books集合,而是将Book字段添加到Book类中
所以答案是坚持使用转换后的(即非设置/ -list/-bag)变体.
请投票重新打开此帖子,以便以正确的方式回答和接受.
我有一个表单来创建一个地方.根据国家/地区,省(州,地区)字段是否必需.
当不需要时,我想为null,而不是空字符串.我有代码,使所有空表单字段,null:
def newparams = [:]
place = new Place()
params.each() { k, v ->
if (v instanceof String && place.hasProperty(k)) {
if (!v.trim().length()) {
newparams[k] = null
} else {
newparams[k] = v
}
}
}
place = new Place(newparams)
place.validate()
Run Code Online (Sandbox Code Playgroud)
现在,在地方域中,我在该省有一个验证器:
province validator: {val, obj -> if (obj.country in obj.requiresRegionCountries() && !obj.province) return [province.required]}
Run Code Online (Sandbox Code Playgroud)
有了这个规则,即使是否需要,我总是得到"省不能为空".
我认为这是因为设置的可空验证器默认为false.
如果我添加nullable:true,那么即使省是必需的,也会跳过自定义验证器,并且可以使用空省保存(我认为这是因为它实例化为null)
现在,我需要以某种方式我的自定义验证器,并能够在我的验证器中指定可为空的内容,如下所示:
province validator: {val, obj ->
if (obj.country in obj.requiresRegionCountries() && !obj.province) {
nullable: false
return [province.required] }
else {
nullable: …Run Code Online (Sandbox Code Playgroud) 我是Grails的新手.我有一个Person域类:
class Person {
String firstName
String lastName
String gender
Date dateOfBirth
}
Run Code Online (Sandbox Code Playgroud)
并且想知道我是否可以为属性定义可能的值 - 比如性别为{M,F,U},这样当为Person控制器使用动态脚手架时,这三个值将在组合框中列出.
在这里,我只是想知道Grails框架中是否有这样的功能?如果存在此功能,那么我该如何使用它?
在我的Grails域类中,我想设置在数据库中保留的默认值.我使用mysql作为数据库.我试着这样做:
class A {
long someValue = 1
long someOtherValue
boolean someBool = true
boolean someOtherBool
static mapping = {
someOtherValue defaultValue: 1
someOtherBool defaultValue: true
}
}
Run Code Online (Sandbox Code Playgroud)
但没有任何作用.数据库中没有设置默认值.我需要更改什么才能正确设置默认值?
我有一个域名如下:
class Author {
String id
static hasMany = [accounts: Account]
static belongsTo = Account
static mapping = {
accounts joinTable: [name: "SOMETABLE", key: 'SOMEFIELD'],
ignoreNotFound: true
}
static constraints = {}
}
Run Code Online (Sandbox Code Playgroud)
没有找到记录时,我收到以下错误.我尝试了ignoreNotFound,它无法正常工作.
error message: accounts=org.hibernate.ObjectNotFoundException:
No row with the given identifier exists:
[com.myapplication.Account#123465489785]
Run Code Online (Sandbox Code Playgroud)
尝试选择您无权在数据库中插入的连接2记录时会发生这种情况.请问有解决方法吗?
我正在使用Grails-ElasticSearch插件(0.0.2.5).我想在我的域实例中添加约束,然后在ElasticSearch中对其进行索引.
示例: - 我有一个带有字段'status'的域类A,我想在Database和ElasticSearch之间添加一个抽象,即所有实例都应填入数据库,但应将具有ACTIVE状态的实例发送到elasticsearch.
请建议是否可以这样做?
谢谢,Karan
我在使用IntelliJ处理Grails应用程序时突然遇到一个奇怪的问题.我有不同的域类和其他一些类src/groovy.当我打开一个类文件进行一些更改时,我得到一个错误,这个类已经存在于我没有的包中.我尝试使用重构重命名该类,但之后我仍然得到相同的错误.
任何人都可以在这里暗示什么是错的,或者我做错了什么?
grails ×10
grails-orm ×3
grails-2.0 ×2
hibernate ×2
android ×1
groovy ×1
java ×1
persistence ×1