com.sun.jdi.invocationexception

cbeh67ev  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(333)

我在做一个springmvc项目,我被这个问题困住了。
我有一个实体“tipodoc”,他自己的服务和使用jpa repository的存储库,在我的服务中我有一个getall()方法,而不是调用findall()jpa repository方法,它工作得很好,但是当我想使用一个方法通过id获取一个时,无论我向该方法发送什么id,我都会收到一个空对象。
因此,我开始调试搜索问题,当hibernate必须从jpa存储库执行getone()方法时,我发现com.sun.jdi.invocationexception作为响应。
我不知道我的代码有什么问题,或者如何从异常中获得更多的细节。。我使用log4j进行登录,但我不知道如何在日志中捕获异常。。
我在使用mysql数据库
这是我的密码

@Entity
@Table(name = "TiposDocumento")
public class TipoDoc 
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idTipoDocumento")
    private long id;

    private String descripcion;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }
}

服务

@Service
public class TipoDocService {

    private final TipoDocRepo tipoDocRepo;

    @Autowired
    public TipoDocService(TipoDocRepo tipoDocRepo) {
        this.tipoDocRepo = tipoDocRepo;
    }

    public List<TipoDoc> getAll() {
        return (List<TipoDoc>)tipoDocRepo.findAll();
    }

    public TipoDoc getById(Long id) {
        return (TipoDoc) tipoDocRepo.getOne(id);
    }
}

存储库

public interface TipoDocRepo extends JpaRepository<TipoDoc, Long>{
}

控制器

@Controller
public class ClientController
{
    private static final Logger logger = Logger.getLogger(ClientController.class);
    private final ClienteService clienteService;
    private final TipoDocService tipoDocService;
    private final EstadoCivilService estadoCivilService;
    private final ProvinciaService provinciaService;
    private final LocalidadService localidadService;
    private final CondIvaService condIvaService;

    @Autowired
    public ClientController(ClienteService clienteService, TipoDocService tipoDocService, EstadoCivilService estadoCivilService,
            ProvinciaService provinciaService, LocalidadService localidadService, CondIvaService condIvaService) {
        this.clienteService = clienteService;
        this.tipoDocService = tipoDocService;
        this.estadoCivilService = estadoCivilService;
        this.provinciaService = provinciaService;
        this.localidadService = localidadService;
        this.condIvaService = condIvaService;

    }

    @RequestMapping("/Clientes")
    public ModelAndView formularioCliente()
    {   
        ModelAndView mav = new ModelAndView("clientes");
        mav.getModel().put("cliente",new Cliente());
        mav.getModel().put("tiposDoc", tipoDocService.getAll()); //Works fine, tiposDoc={{1,DNI};{2,Passaport};{3,LC}}
        TipoDoc tipoDoc = tipoDocService.getById((long) 1); //not working tipoDoc={0,null} when it have to be {1,DNI}
        mav.getModel().put("estadosCiviles", estadoCivilService.getAll());
        mav.getModel().put("provincias", provinciaService.getAll());
        mav.getModel().put("localidades", localidadService.getAll());
        mav.getModel().put("condicionesIva", condIvaService.getAll());
        return mav;
    }

持久性.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
  version="2.1">

  <persistence-unit name="OFYS">
    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="admin" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/OFYS" />

        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
    </properties>
  </persistence-unit>

</persistence>

这就是我能找到的调试
编辑。这里是从例外的完整描述,我可以得到如果你没有看到图像
com.sun.jdi.invocationexception:目标vm ocurred调用方法中发生异常。

ulydmbyx

ulydmbyx1#

数据库中不存在具有给定id的对象。显然,您在持久性上下文中有该对象的代理,该代理在此处返回。当访问对象时,它试图从数据库中实际加载它,但失败了,因为没有具有该id的行。

相关问题