当前位置: 首页 > 知识库问答 >
问题:

spring应用中尝试用实体管理器从数据库中删除记录后出现NullPointer异常

司马耘豪
2023-03-14

我在spring应用程序中工作,它正在管理一个dogshotel buisness。在应用程序中,我有两个实体类--Cage和Dog(Dog属性之一是Cage)。关于狗和笼子的数据存储在MySQL数据库中。在应用程序中,我们首先创建一个Dog对象,初始化属性,如:姓名、年龄、种族、性别、所有者姓名、所有者编号。在dogRepository类中使用实体管理器持久化方法后,数据库中将出现一条新记录:

@Override
@Transactional
public void createDog(String name, String race, int age, String sex, String ownerFullName, int ownerPhoneNumber) {
    Dog newDog = new Dog(name, race, age, sex, ownerFullName, ownerPhoneNumber);
    em.persist(newDog);
}

狗类:

@Transactional
public void setCage(Cage cage) {
    if(cage.isFree()) {
        this.cage = cage;
        this.startOfStayDate = LocalDate.now();
        this.endOfStayDate = this.startOfStayDate.plusDays(this.durationOfStayInDays);
        cage.setFree(false);
        cage.setOccupied(true);
    }
}

public void setNullCage() {
    this.cage.setOccupied(false);
    this.cage.setFree(true);
    this.cage = null;
    this.startOfStayDate = null;
    this.endOfStayDate = null;
}

dogrepository:

@Override
@Transactional
public void removeDog(Integer id) {
    Dog dog = getDogById(id);
    if (dog.getCage().isOccupied()) {
        dog.setNullCage();
    }
        em.remove(dog);

}

犬只服务:

 public void removeDog(Integer id) {
    dogRepository.removeDog(id);
}

共有1个答案

宰父正真
2023-03-14

发生这种情况是因为在检查cage是否被占用之前,您没有检查它是否为空。我认为,代码应该是这样的:

if (dog.getCage != null && dog.getCage().isOccupied()) {
    dog.setNullCage();
}

另外,您的方法setNullCage()也有同样的缺陷。

 类似资料:
  • 这里是将从其中删除记录的index.jsp文件。 index.jsp

  • 从android工作室按特定值删除记录的适当代码是什么。 必需:如果starCount字段等于0,则删除所有记录。

  • 问题内容: 我正在使用php,mysql和ajax从表中删除记录。问题是,在MySQL_query中,它没有获取显示为“ id = undefined”的ID,我试图将ID传递给查询,但我不知道我哪里出了错,我试图打印MySQL的节目 谁能告诉我如何通过身份证…谢谢 我的阿贾克斯 我的HTML delete.php 问题答案: 您ID的索引是1,即第二个索引。不是2。

  • 在我的项目中,我有两个实体与@OneTomany和@ManyToOne相关。看看这些照片- 我的问题-当我从供应品中删除记录时,也会从产品中删除记录,但我不会这样做。如果我删除CascadeType.All,然后重试此操作,将出现错误 com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityConstraintViolationException:无法删除或更新

  • 我仍在开发我的登录应用程序。此时,用户可以注册、登录和更新配置文件信息。数据存储在firebase实时数据库中,该装置也通过firebase工作。我想添加一个“删除配置文件”按钮,以便从firebase中删除用户信息。我弄清楚了如何从自动认证过程中删除用户。现在我尝试对Uid调用remove()函数,因此现在数据在实时数据库中被删除,但仍在Firebase身份验证中,如果删除userdata,应用

  • 在mysql工作台中,我试图执行 这是一个查询,但是我收到了这个消息 错误代码:1175。您使用的是安全更新模式,并且您试图更新一个没有使用键列禁用安全模式的表,请在“首选项”中切换该选项-