Я провел последние пару дней, пытаясь определить причину проблемы с удалением одной строки. Я озадачен этими проблемами, так как мне не сообщают об ошибках! В чем я уверен, 1) В БД Postgres есть одна строка данных. Я жестко закодировал первичный ключ, в котором его необходимо удалить.
Контроллер регистрации пользователя
@RestController
@RequestMapping(value = "registration")
public class RegistrationController {
@Autowired
UserRegistrationService registrationService;
@PostMapping(value = "/register")
public void registerUser(@RequestBody UserInformation accountInfo) {
// Perform some back validation.
registrationService.createUserInformation(accountInfo);
}
@DeleteMapping(value = "/register/{id}")
public void deleteUser(@PathVariable("id") Integer userId) {
// Delete the registration account
registrationService.deleteUserInformation(userId);
}
}
Служба регистрации пользователей
@Service
public class UserRegistrationService {
@Autowired
UserInformationRepository userInformationRepository;
/**
* Accepts a user's registration and attempts to save it to the database.
* @param info
*/
public void createUserInformation(UserInformation info) {
userInformationRepository.save(info);
}
public void deleteUserInformation(Integer userId) {
UserInformation user = userInformationRepository.findById(userId).get();
userInformationRepository.delete(user);
// userInformationRepository.deleteById(userId);
}
}
Хранилище информации о пользователях
Нет пользовательских сигнатур методов.
Модель пользовательской информации
@Entity
@Table(name = "user_info")
public class UserInformation {
@Id
@Generated(value = "GenerationType.AUTO")
private int id;
@OneToOne(targetEntity = PersonalInfo.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "personal_info")
private PersonalInfo personalInfo;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "email")
private String emailAddress;
+ Setters and Getters
}
PersonalInfo Model
@Entity
@Table(name = "personal_info")
public class PersonalInfo {
@Id
@Generated(value="GenerationType.AUTO")
@Column(name = "info_id")
private int infoId;
@Column(name = "firstname")
private String firstName;
@Column(name = "lastname")
private String lastName;
@Column(name = "street")
private String street;
@Column(name = "city")
private String city;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "state_id")
private States state;
@Column(name = "zipcode")
private String zipCode;
@Column(name = "mobile_number")
private String mobileNumber;
@Column(name = "home_number")
private String homeNumber;
@Column(name = "work_number")
private String workNumber;
@OneToOne(mappedBy = "personalInfo", orphanRemoval = true)
private UserInformation user;
+ Setters and Getters
}
Состояния Модель
@Entity
@Table(name="states")
public class States {
@Id
//@Generated(value="GenerationType.AUTO")
@Column(name = "id")
private Long id;
@Column(name="abbrev")
private String abbreviation;
@Column(name="state_name")
private String stateName;
@OneToMany(mappedBy = "state")
private List<PersonalInfo> personalInfos;
+ Setters and Getters
}
Я изначально пытался использовать deleteById, но, похоже, он ничего не делал. У меня такое чувство, что что-то действительно очевидное, что мне не хватает.
Обновления: Я изменил тип данных для значения "id" с int на Integer в модели UserInformation. Когда я запускаю тест на удаление с этим изменением, запись удаляется. Однако тогда я не могу вставить записи. Похоже, что существует проблема в отношении типа данных и того, как база данных Postgres обрабатывает его. Кто-нибудь сталкивался с такой проблемой?
Stacktrace при вставке с типом данных Integer
at com.deck.grocerymanager.Integration.RegistrationTest.userRegTest(RegistrationTest.java:82)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)