我正在使用Postgresql 9.4为Grails 2.4.4上的Web应用程序编写Spock Integration测试,并且我坚持下面的错误。我包括测试规范和抛出错误的代码部分。这个错误很奇怪只发生在我的机器上,运行Lubuntu 14.10。测试在我同事的机器上运行正常,这也是Lubuntu 14.10。我已将他的项目工作区和grails sdk复制到我的机器上,结果没有变化。我感谢任何人都可以帮助的任何帮助。
Failure: br.ufscar.sagui.controleacesso.AutorizaPassagemControllerIntegrationSpec | java.lang.NoClassDefFoundError: org/codehaus/groovy/grails/orm/hibernate/HibernateGormStaticApi$6
at br.ufscar.sagui.controleacesso.autorizacao.AutorizacaoPassante.afterInsert(AutorizacaoPassante.groovy:65)
at org.grails.datastore.gorm.support.EventTriggerCaller$MethodCaller.call(EventTriggerCaller.java:153)
at org.grails.datastore.gorm.support.EventTriggerCaller.call(EventTriggerCaller.java:96)
at org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener.onApplicationEvent(AbstractPersistenceEventListener.java:47)
at br.ufscar.sagui.controleacesso.test.SaguiControleAcessoTestUtil.adicionarAutorizacaoPassanteVisitante(SaguiControleAcessoTestUtil.groovy:514)
at br.ufscar.sagui.controleacesso.AutorizaPassagemControllerIntegrationSpec.setupSpec(AutorizaPassagemControllerIntegrationSpec.groovy:41) Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.grails.orm.hibernate.HibernateGormStaticApi$6
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
... 6 more Caused by: java.util.zip.ZipException: error reading zip file
at java.util.zip.ZipFile.access$1400(ZipFile.java:61)
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:717)
at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:420)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:450)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
... 9 more
我安装的插件(从'grails list-plugins'输出):
Plug-ins you currently have installed are listed below:
-------------------------------------------------------------
cache 1.1.8 -- Cache Plugin
hibernate4 4.3.6.1 -- Hibernate 4 for Grails
plastic-criteria 1.5.1 -- Plastic Criteria Plugin
platform-core 1.0.0 -- Plugin Platform Core
release 3.0.1 -- Release Plugin
rest-client-builder 1.0.3 -- REST Client Builder Plugin
sagui-controleacesso0.1 -- Sagui Controleacesso Plugin
sagui-core 1.0-SNAPSHOT -- Sagui Core Plugin
spring-security-core2.0-RC4 -- Spring Security Core Plugin
tomcat 7.0.55 -- Apache Tomcat plugin for Grails
webxml 1.4.1 -- WebXmlConfig
To find more info about plugin type 'grails plugin-info [NAME]'
To install type 'grails install-plugin [NAME] [VERSION]'
For further info visit http://grails.org/Plugins
抛出错误的类(AutorizacaoPassante):
package br.ufscar.sagui.controleacesso.autorizacao
import br.ufscar.sagui.controleacesso.controle.ControleAutorizacao
import br.ufscar.sagui.controleacesso.midia.provisoria.MidiaIdentificacaoProvisoria
/**
* Classe de domínio que descreve uma autorização de passante. Pode autorizar uma passagem independente de vínculo.
* Associa uma mídia de identificação a uma unidade organizacional, opcionalmente um veículo (somente para passante
* visitante), e um periodo de validade.
*
* @author Erick, Francisco, Jorge.
* @since 10/12/2014
*/
class AutorizacaoPassante implements Comparable<AutorizacaoPassante>{
String id
Date dateCreated // Data em que o registro foi criado.
Date inicioAutorizacao // Data em que a autorização se inicia.
Date fimAutorizacao // Data em que a autorização termina.
String observacao
Boolean ativo
MidiaIdentificacaoProvisoria midiaProvisoria
static constraints = {
observacao(nullable: true, blank: true, widget: "textarea")
inicioAutorizacao(nullable: false)
fimAutorizacao(nullable: false)
ativo(nullable: false)
midiaProvisoria(nullable: false)
}
static mapping = {
id (generator: "uuid")
table (schema: "controleacesso")
}
@Override
int compareTo(AutorizacaoPassante autorizacaoPassante) {
return id <=> autorizacaoPassante.id
}
def beforeValidate() {
def podeSerSalvo = true
def autorizacao = AutorizacaoPassante.findByMidiaProvisoriaAndAtivo(this.midiaProvisoria,true)
if(autorizacao && autorizacao.compareTo(this)!=0)
podeSerSalvo = false
if (!podeSerSalvo) {
this.errors.reject('erro.midia.midiaJaPossuiAutorizacaoAtiva')
this.errors.rejectValue('midia', 'erro.midia.midiaJaPossuiAutorizacaoAtiva')
}
}
private def adicionarAutorizacaoTabelaControle(){
if (new ControleAutorizacao(autorizacao: this).save(flush: true))
log.info("controleAutorizacao inserido: ${this.id}")
}
def afterInsert(){
withNewSession { // Line 65, where the error is thrown.
if (this.ativo)
adicionarAutorizacaoTabelaControle()
}
}
def afterUpdate(){
withNewSession {
if (this.ativo)
adicionarAutorizacaoTabelaControle()
else{
if (ControleAutorizacao.findByAutorizacao(this).delete(flush: true))
log.info("controleAutorizacao removido: ${this.id}")
}
}
}
}
测试类:
package br.ufscar.sagui.controleacesso
import br.ufscar.sagui.controleacesso.dispositivo.DispositivoAcesso
import br.ufscar.sagui.controleacesso.test.SaguiControleAcessoTestUtil
import grails.test.spock.IntegrationSpec
import groovy.json.JsonSlurper
import spock.lang.Shared
class AutorizaPassagemControllerIntegrationSpec extends IntegrationSpec {
static transactional = true
AutorizaPassagemController controller = new AutorizaPassagemController()
@Shared def visitante
@Shared def estado
@Shared def midia
@Shared def tipoLeitor
@Shared def tipoDispositivo
@Shared def dispositivo
@Shared def leitor
@Shared def grupoLeitor
@Shared def tipoUnidade
@Shared def unidade
@Shared def autorizacao
def setupSpec() {
visitante = SaguiControleAcessoTestUtil.adicionarPassanteVisitante("Visitante 1", "12234344",TipoDocumento.CPF)
estado = SaguiControleAcessoTestUtil.adicionarEstadoMidiaIdentificacao("Estado de midia de identificação ativo", true)
midia = SaguiControleAcessoTestUtil.adicionarMidiaProvisoria("1234",estado)
tipoLeitor = SaguiControleAcessoTestUtil.adicionarTipoLeitorAcesso("Leitor tipo não-urna.", false)
tipoDispositivo = SaguiControleAcessoTestUtil.adicionarTipoDispositivoAcesso("Tipo de dispositivo de acesso teste.")
dispositivo = SaguiControleAcessoTestUtil.adicionarDispositivoAcesso("Dispositivo teste.", "3456", tipoDispositivo)
leitor = SaguiControleAcessoTestUtil.adicionarLeitorAcesso("Leitor teste","2345",0,1,true, tipoLeitor,
DirecaoAcesso.BIDIRECIONAL, dispositivo)
grupoLeitor = SaguiControleAcessoTestUtil.adicionarGrupoLeitorAcesso("Grupo teste 1.", [leitor])
tipoUnidade = SaguiControleAcessoTestUtil.adicionarTipoUnidadeOrganizacional("Unidade teste.")
unidade = SaguiControleAcessoTestUtil.adicionarUnidadeOrganizacional("Unidade teste.", "ET", "Portaria 1",Common.criaData(2014,1,1), Common.criaData(2015,1,1), tipoUnidade)
autorizacao = SaguiControleAcessoTestUtil.adicionarAutorizacaoPassanteVisitante(visitante,unidade,Common.criaData(2010,1,1),
Common.criaData(2015,1,1),midia) // Line 41, where the exception is thrown.
}
void "autorizaPassagem deve autorizar Tag em uma passagem válida."() {
setup:
def codigoLeitor = "2345"
def codigoMidia = "1234"
def dispositivoId = DispositivoAcesso.findByCodigo("3456")?.id
def dataOcorrencia = "01/01/2015 00:00:00"
JsonSlurper jsonSlurper = new JsonSlurper()
controller.request.parameters = [codigoMidia: codigoMidia, codigoLeitor: codigoLeitor, data: dataOcorrencia, dispositivoId: dispositivoId]
when:
controller.autorizarPassagem()
def retornoAutorizarPassagem = controller.response.contentAsString as String
def retornoMap = jsonSlurper.parseText(retornoAutorizarPassagem) as Map
then:
retornoMap==["EVENTO":"1", "FXCREDITO":"0", "MSG":"Teste", "NIVEL":"1"]
}
}
测试实用程序方法类:
package br.ufscar.sagui.controleacesso.test
import br.ufscar.sagui.controleacesso.acl.AplicacaoPoliticaAcesso
import br.ufscar.sagui.controleacesso.acl.PoliticaAcesso
import br.ufscar.sagui.controleacesso.acl.TabelaHorarioPoliticaAcesso
import br.ufscar.sagui.controleacesso.autorizacao.AutorizacaoPassante
import br.ufscar.sagui.controleacesso.autorizacao.AutorizacaoPassantePessoa
import br.ufscar.sagui.controleacesso.autorizacao.AutorizacaoPassanteVisitante
import br.ufscar.sagui.controleacesso.dispositivo.DispositivoAcesso
import br.ufscar.sagui.controleacesso.dispositivo.TipoDispositivoAcesso
import br.ufscar.sagui.controleacesso.dispositivo.leitor.GrupoLeitorAcesso
import br.ufscar.sagui.controleacesso.dispositivo.leitor.LeitorAcesso
import br.ufscar.sagui.controleacesso.dispositivo.leitor.TipoLeitorAcesso
import br.ufscar.sagui.controleacesso.midia.EstadoMidiaIdentificacao
import br.ufscar.sagui.controleacesso.midia.MidiaIdentificacao
import br.ufscar.sagui.controleacesso.midia.RegistroMudancaEstadoMidiaIdentificacao
import br.ufscar.sagui.controleacesso.midia.permanente.MidiaIdentificacaoPermanenteCartao
import br.ufscar.sagui.controleacesso.midia.permanente.MidiaIdentificacaoPermanenteTag
import br.ufscar.sagui.controleacesso.midia.provisoria.MidiaIdentificacaoProvisoria
import br.ufscar.sagui.core.Pessoa
import br.ufscar.sagui.core.TipoUnidadeOrganizacional
import br.ufscar.sagui.core.UnidadeOrganizacional
import br.ufscar.sagui.core.Vinculo
import br.ufscar.sagui.core.grupo.Grupo
import org.springframework.util.Assert
/**
* Created by francisco on 29/01/2015.
*/
class SaguiControleAcessoTestUtil {
static GrupoLeitorAcesso adicionarGrupoLeitorAcesso(String nomeGrupo, List<LeitorAcesso> leitores = []){
Assert.notNull nomeGrupo, "O objeto [nomeGrupo] não pode ser nulo"
def grupo = new GrupoLeitorAcesso()
grupo.nomeGrupo = nomeGrupo
grupo.leitores = (leitores as Set)
if(grupo.save(flush: true)){
println("Grupo leitor acesso com id [${grupo.id}] salvo.")
}
else{
println("Falha ao salvar o grupo de leitores de acesso [${grupo}].")
println(grupo.getErrors())
return null
}
return grupo
}
static TipoLeitorAcesso adicionarTipoLeitorAcesso (String nome, Boolean urna) {
Assert.notNull(nome, "Nome nulo.")
Assert.notNull(urna, "Urna nula.")
def tipoLeitor = new TipoLeitorAcesso(nome: nome, urna: urna)
if (tipoLeitor.save()) {
println("Tipo de leitor de acesso com id [${tipoLeitor.id}] salvo.")
} else{
println("Falha ao salvar tipo de leitor de acesso [${tipoLeitor}].")
println(tipoLeitor.getErrors())
return null
}
return tipoLeitor
}
static LeitorAcesso adicionarLeitorAcesso(String nomeLeitor,String codigo, Integer nivelOrigem, Integer nivelDestino,Boolean permitirPassanteVisitante, TipoLeitorAcesso tipo,
DirecaoAcesso direcaoAcesso,DispositivoAcesso dispositivo){
Assert.notNull nomeLeitor, "O objeto [nomeLeitor] não pode ser nulo"
Assert.notNull nivelOrigem, "O objeto [nivelOrigem] não pode ser nulo"
Assert.notNull nivelDestino, "O objeto [nivelDestino] não pode ser nulo"
Assert.notNull permitirPassanteVisitante, "O objeto [permitirPassanteVisitante] não pode ser nulo"
Assert.notNull tipo, "O objeto [tipo] não pode ser nulo"
Assert.notNull direcaoAcesso, "O objeto [direcaoAcesso] não pode ser nulo"
Assert.notNull codigo, "O objeto [codigo] não pode ser nulo"
Assert.notNull dispositivo, "O objeto [dispositivo] não pode ser nulo"
def leitor = new LeitorAcesso()
leitor.nome = nomeLeitor
leitor.nivelDestino = nivelDestino
leitor.nivelOrigem = nivelOrigem
leitor.permitirPassanteVisitante = permitirPassanteVisitante
leitor.tipo = tipo
leitor.direcaoAcesso = direcaoAcesso
leitor.codigo = codigo
leitor.dispositivo = dispositivo
if(leitor.save()){
println("Leitor de acesso com id [${leitor.id}] salvo.")
}
else{
println("Falha ao salvar leitor de acesso [${leitor}].")
println(leitor.getErrors())
return null
}
return leitor
}
static TipoDispositivoAcesso adicionarTipoDispositivoAcesso(String nome){
def dispositivo = new TipoDispositivoAcesso(nome: nome)
if (dispositivo.save(flush: true)){
println("Tipo de dispositivo de acesso com id [${dispositivo.id}] salvo.")
}else{
println("Falha ao salvar tipo de dispositivo de acesso [${dispositivo}]")
println(dispositivo.getErrors())
return null
}
return dispositivo
}
static TipoUnidadeOrganizacional adicionarTipoUnidadeOrganizacional(String nome){
def tipo = new TipoUnidadeOrganizacional(nome: nome)
if (tipo.save(flush: true)){
println("Tipo de unidade organizacional com id [${tipo.id}] salva.")
}else{
println("Falha ao salvar o tipo de unidade organizacional [${tipo}].")
println(tipo.getErrors())
return null
}
return tipo
}
static UnidadeOrganizacional adicionarUnidadeOrganizacional(String nome, String sigla, String portaria, Date inicio,
Date fim, TipoUnidadeOrganizacional tipo){
def unidade = new UnidadeOrganizacional(nome: nome, sigla: sigla, portariaCriacao: portaria,
inicioFuncionamento: inicio, fimFuncionamento: fim, tipo: tipo)
if (unidade.save(flush: true)){
println("Unidade organizacional com id [${unidade.id}] salva.")
} else{
println("Falha ao salvar a unidade organizacional [${unidade}].")
println(unidade.getErrors())
return null
}
return unidade
}
static DispositivoAcesso adicionarDispositivoAcesso(String nomeDispositivo,String codigo, TipoDispositivoAcesso tipo){
Assert.notNull nomeDispositivo, "O objeto [nomeDispositivo] não pode ser nulo"
Assert.notNull codigo, "O objeto [codigo] não pode ser nulo"
Assert.notNull tipo, "O objeto [tipo] não pode ser nulo"
def dispositivo = new DispositivoAcesso()
dispositivo.nome = nomeDispositivo
dispositivo.codigo=codigo
dispositivo.tipo = tipo
if(dispositivo.save(flush: true)){
println("Dispositivo de acesso com id [${dispositivo.id}] salvo.")
}
else{
println("Erro ao salvar dispositivo de acesso [${dispositivo}].")
println(dispositivo.getErrors())
return null
}
return dispositivo
}
static PassanteVisitante adicionarPassanteVisitante(String nome, String documento, TipoDocumento tipoDocumento, String observacao = null){
Assert.notNull nome, "A literal [nome] não pode ser nulo"
Assert.notNull documento, "O literal [documento] não pode ser nulo"
Assert.notNull tipoDocumento, "O objeto [tipoDocumento] não pode ser nulo"
def visitante = new PassanteVisitante()
visitante.setNome(nome)
visitante.setDocumento(documento)
visitante.setTipoDocumento(tipoDocumento)
visitante.setObservacao(observacao)
if (visitante.save()) {
println("Passante Visitante com id [${visitante.id}] salvo.")
} else {
println("Falha ao salvar o passante visitante [${visitante}].")
println(visitante.getErrors())
return null
}
return visitante
}
static PassantePessoa adicionarPassantePessoa(Pessoa pessoa){
Assert.notNull pessoa, "O objeto [pessoa] não pode ser nulo"
def passante = new PassantePessoa(pessoa: pessoa)
if(passante.save(flush: true)){
println("Passante pessoa com id [${passante.id}] salvo.")
}
else{
println("Falha ao salvar passante pessoa [${passante}]")
println(passante.getErrors())
return null
}
return passante
}
static PoliticaAcesso adicionarPoliticaAcesso(String nomePolitica,Boolean antipassBack, Boolean controlarRota, Boolean ativa, Boolean negar,GrupoLeitorAcesso grupoLeitorAcesso,String observacao = null){
Assert.notNull nomePolitica, "O objeto [nomePolitica] não pode ser nulo"
Assert.notNull antipassBack, "O objeto [antipassBack] não pode ser nulo"
Assert.notNull controlarRota, "O objeto [controlarRota] não pode ser nulo"
Assert.notNull ativa, "O objeto [ativar] não pode ser nulo"
Assert.notNull negar, "O objeto [negar] não pode ser nulo"
Assert.notNull grupoLeitorAcesso, "O objeto [grupoLeitorAcesso] não pode ser nulo"
def politica = new PoliticaAcesso()
politica.antipassBack = antipassBack
politica.ativa = ativa
politica.negar = negar
politica.controlarRota = controlarRota
politica.grupoLeitorAcesso = grupoLeitorAcesso
politica.observacao = observacao
politica.nome = nomePolitica
if(politica.save(flush: true)){
println("Politica de acesso com id [${politica.id}] salva.")
}
else{
println("Falha ao salvar politica de acesso [${politica}].")
println(politica.getErrors())
return null
}
return politica
}
static TabelaHorarioPoliticaAcesso adicionarTabelaHorarioPoliticaAcesso(Integer diaSemana,Integer horaInicio, Integer minutoInicio, Integer horaFim, Integer minutoFim,PoliticaAcesso politicaAcesso){
Assert.notNull diaSemana, "O objeto [diaSemana] não pode ser nulo"
Assert.notNull horaInicio, "O objeto [horaInicio] não pode ser nulo"
Assert.notNull minutoInicio, "O objeto [minutoInicio] não pode ser nulo"
Assert.notNull horaFim, "O objeto [horaFim] não pode ser nulo"
Assert.notNull minutoFim, "O objeto [minutoFim] não pode ser nulo"
Assert.notNull politicaAcesso, "O objeto [politicaAcesso] não pode ser nulo"
def tabela = new TabelaHorarioPoliticaAcesso()
tabela.diaSemana = diaSemana
tabela.horaInicio = horaInicio
tabela.minutoInicio = minutoInicio
tabela.horaFim = horaFim
tabela.minutoFim = minutoFim
tabela.politicaAcesso = politicaAcesso
if(tabela.save(flush: true)){
println("Tabela de horario com id [${tabela.id}] salva.")
}
else{
println("Falha ao salvar tabela de horario [${tabela}].")
println(tabela.getErrors())
return null
}
return tabela
}
static AplicacaoPoliticaAcesso adicionarAplicacaoPoliticaAcesso(PoliticaAcesso politicaAcesso, Grupo grupo , Passante passante, Boolean ativo){
Assert.notNull politicaAcesso, "O objeto [politicaAcesso] não pode ser nulo"
if((grupo == null && passante == null)||(grupo != null && passante != null))
Assert.fail "O objeto [grupo] e [passante] não podem ser nulos nem verdadeiros ao mesmo tempo"
Assert.notNull ativo, "O boleano [ativo] não pode ser nulo"
def aplicacaoPoliticaAcesso = new AplicacaoPoliticaAcesso(politicaAcesso: politicaAcesso, grupo: grupo,
passante: passante, ativo: ativo)
if(aplicacaoPoliticaAcesso.save(flush: true)){
println("Aplicacao de política de acesso com id [${aplicacaoPoliticaAcesso.id}] salva.")
}
else{
println("Falha ao salvar aplicacao de política de acesso [${aplicacaoPoliticaAcesso}].")
println(aplicacaoPoliticaAcesso.getErrors())
return null
}
return aplicacaoPoliticaAcesso
}
static AutorizacaoPassanteVisitante adicionarAutorizacaoPassanteVisitante(PassanteVisitante visitante, UnidadeOrganizacional unidade, Date inicioAutorizacao, Date fimAutorizacao, MidiaIdentificacaoProvisoria midiaProvisoria, Veiculo veiculo = null, String observacao = null, Boolean ativo = true){
Assert.notNull visitante, "O objeto [visitante] não pode ser nulo"
Assert.notNull unidade, "O objeto [unidade] não pode ser nulo"
Assert.notNull inicioAutorizacao, "O objeto [inicioAutorizacao] não pode ser nulo"
Assert.notNull fimAutorizacao, "O objeto [fimAutorizacao] não pode ser nulo"
Assert.notNull midiaProvisoria, "O objeto [MidiaIdentificacaoProvisoria] não pode ser nulo"
def autorizacao = new AutorizacaoPassanteVisitante()
autorizacao.passanteVisitante = visitante
autorizacao.unidadeOrganizacionalDestino = unidade
autorizacao.inicioAutorizacao = inicioAutorizacao
autorizacao.fimAutorizacao = fimAutorizacao
autorizacao.midiaProvisoria = midiaProvisoria
autorizacao.veiculoPassanteVisitante = veiculo
autorizacao.ativo = ativo
autorizacao.observacao = observacao
//Cria registro que relaciona visitante e veiculo
if(veiculo&&visitante)
adicionarPassanteVisitanteVeiculo(visitante,veiculo)
if (autorizacao.save(flush: true)) {
println("Autorizacao passante visitante com id [${autorizacao.id}] salva.")
} else {
println("Falha ao salvar autorizacao passante visitante [${autorizacao}].")
println(autorizacao.getErrors())
return null
}
return autorizacao
}
static AutorizacaoPassantePessoa adicionarAutorizacaoPassantePessoa(PassantePessoa passantePessoa, Date inicioAutorizacao, Date fimAutorizacao, String observacao = null, Boolean ativo = true, MidiaIdentificacaoProvisoria midiaProvisoria){
Assert.notNull passantePessoa, "O objeto [visitante] não pode ser nulo"
Assert.notNull inicioAutorizacao, "O objeto [inicioAutorizacao] não pode ser nulo"
Assert.notNull fimAutorizacao, "O objeto [fimAutorizacao] não pode ser nulo"
Assert.notNull midiaProvisoria, "O objeto [MidiaIdentificacaoProvisoria] não pode ser nulo"
def autorizacao = new AutorizacaoPassantePessoa()
autorizacao.passantePessoa = passantePessoa
autorizacao.inicioAutorizacao = inicioAutorizacao
autorizacao.fimAutorizacao = fimAutorizacao
autorizacao.midiaProvisoria = midiaProvisoria
autorizacao.ativo = ativo
autorizacao.observacao = observacao
if (autorizacao.save(flush: true)) {
println("Autorizacao Passante Pessoa com id [${autorizacao.id}] salva.")
} else {
println("Falha ao salvar autorizaçao passante pessoa [${autorizacao}].")
println(autorizacao.getErrors())
return null
}
return autorizacao
}
static EstadoMidiaIdentificacao adicionarEstadoMidiaIdentificacao(String nome, Boolean ativo){
def midia = new EstadoMidiaIdentificacao(nome: nome, ativo: ativo,)
if(midia.save(flush: true)){
println("Estado de midia de identificação com id [${midia.id}] salvo." )
} else {
println("Falha ao salvar o estado de midia de identificação [${midia}].")
println(midia.getErrors())
return null
}
return midia
}
static MidiaIdentificacaoProvisoria adicionarMidiaProvisoria(String codigoMidia, EstadoMidiaIdentificacao estado) {
Assert.notNull codigoMidia, "O objeto [codigoMidia] não pode ser nulo"
Assert.notNull estado, "O objeto [estado] não pode ser nulo"
def midiaProvisoria = new MidiaIdentificacaoProvisoria()
midiaProvisoria.estadoMidiaIdentificacao = estado
midiaProvisoria.codigo = codigoMidia
if (midiaProvisoria.save(flush: true)) {
println("Midia de identificação provisória com id [${midiaProvisoria?.id}] salva.")
} else {
println("Falha ao salvar a midia de identificaçao provisoria com id [${midiaProvisoria}].")
println(midiaProvisoria.getErrors())
return null
}
return midiaProvisoria
}
}
谢谢!
答案 0 :(得分:0)
问题在于hibernate插件。我从.m2文件夹中删除了它,并且使用run-app再次安装它。这解决了这个问题。它肯定已经被破坏了。
谢谢!