只是试图保持GORM实体之间的关系,并在保存期间附加溢出错误。
1)我在User和DataStore之间创建了manyTomany关系:
User entity:
...
static belongsTo = DataStore
static hasMany = [groups: Groups,dataStore:DataStore]
Profile profile
Contacts contact
DataStore dataStore
...
DataStore entity:
...
static belongsTo = [service:Service]
static hasMany = [users:User]
Service service
List<User> users
...
2)从控制器调用服务以保存数据:
UserRole.create user, roleCustomer, true
UserRole.create user, roleAdmin, true
dataStoreService.createDS('ds',profile.service,user)
3)服务逻辑:
@Transactional
def createDS(ds,service,user) {
def key = service.domainkey
if (user && key) {
DataStore ds = new DataStore(ds:ds)
ds.validate() ? ds.save(flus:true) : ds.errors.allErrors.println()
ds.addToUsers(user).save(flush:true)
service.addToDataStore(ds).save(flush:true)
user.setDataStore(ds)
...}
4)我需要解决的奇怪错误:
Stacktrace如下: org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException:执行controller [$$。StoreController]的action [sendOrder]导致异常:运行时错误执行操作 at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195) at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63) 在net.bull.javamelody.JspWrapper.invoke(JspWrapper.java:149) at net.bull.javamelody.JdbcWrapper $ DelegatingInvocationHandler.invoke(JdbcWrapper.java:259) 在net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:202) 在net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:175) at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:918) 在java.lang.Thread.run(Thread.java:680) 引起:org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException:运行时错误执行操作 ......还有9个 引起:java.lang.reflect.InvocationTargetException ......还有9个 引起:java.lang.StackOverflowError 在org.apache.commons.validator.EmailValidator.stripComments(EmailValidator.java:246) 在org.apache.commons.validator.EmailValidator.isValid(EmailValidator.java:95)
请帮忙吗?
答案 0 :(得分:1)
修改
再次查看堆栈跟踪后,问题与Melody无关(可能?也许不是?)但请告诉我们错误的原因。
检查用户的电子邮件参考(不确定它所在的子域类,可能是联系类?打印它或使用调试器检查域值,然后仔细检查您的约束)。如果电子邮件问题与您的域类无关,请再次仔细检查旋律......
org.apache.commons.validator.EmailValidator.isValid(EmailValidator.java:95)......
- 还要仔细检查美乐蒂在做什么。
如果问题与Melody有关,请告知我们,仅供参考。我已经看到使用该插件的人有如此多的随机问题,它看起来很有用,但有些错误。
答案 1 :(得分:0)
您定义了两次变量dataStore
:一次在hasMany
中,一次作为直接参考。
尝试:
User entity:
...
static belongsTo = [datastore: DataStore]
static hasMany = [groups: Groups,dataStores:DataStore]
Profile profile
Contacts contact
...
答案 2 :(得分:0)
在hibernate doc之后重做我的模型:
class User implements Serializable {
static hasMany = [dataStores:DataStore,contacts:Contacts,groups: Groups]
Profile profile
Contacts contacts
List<DataStore> dataStores
有约束:dataStores nullable:true
和DS实体:
class DataStore implements Serializable{
static hasMany = [users:User,contacts:Contacts]
static belongsTo = [service:Service]
Service service
User users
明确删除了几个溢出并保持模型可靠。