JPA не удаляет ни одной строки - PullRequest
0 голосов
/ 09 ноября 2019

Я провел последние пару дней, пытаясь определить причину проблемы с удалением одной строки. Я озадачен этими проблемами, так как мне не сообщают об ошибках! В чем я уверен, 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...