我正在开发管理狗旅馆业务的 spring 应用程序。在应用程序中,我有两个实体类 - Cage 和 Dog(其中一个狗属性是 Cage)。狗和笼子的数据存储在 MySQL 数据库中。在应用程序中,首先我们创建一个 Dog 对象初始化属性,如:姓名、年龄、种族、性别、主人姓名、主人编号。在 dogRepository 类中使用实体管理器 persist 方法后,数据库中会出现一条新记录:
@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);
}
除了我们在创建狗期间输入的属性外,我们可以为其分配笼子并初始化其他属性:int durationOfStayInDays、LocalDate startOfStayDate、LocalDate endOfStayDate、int ownerCharge。
问题是:当狗分配了笼子时,我可以使用实体管理器将其删除,但是当它没有分配笼子时,我在尝试删除它时收到 NullPointerException。以前我在没有使用数据库的情况下运行应用程序(记录存储在程序内的地图中)并且一切正常。在我的代码中有 clases:Dog (Entity) --> DogRepository --> DogService --> DogController。以下是 DogRepository 和 Dog 类的代码片段:
狗类:
@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;
}
狗仓库:
@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);
}
慕工程0101907
慕慕森
MMTTMM
温温酱
随时随地看视频慕课网APP
相关分类