почему JPA - внешний ключ не делает ошибку "ОШИБКА 1452: 1452: Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено" - PullRequest
0 голосов
/ 25 марта 2020

цитата При использовании JPA возникает проблема, которая сохраняется без правильного внешнего ключа. цитата (весна - JPA 사용시 올바른 внешний ключ 없이도 저장 이 되는 문제 가 발생)

Связь (соединение) была создана с помощью JPA. prodDetail.prodNo имеет Prod.no в качестве внешнего ключа.

// hibernate
изменить таблицу prod_detail добавить ограничение FKemc8ttnx3c8rl0d3u9s7xr964 ссылки на внешний ключ (нет) prod (нет)

Я думал, что объект ProdDetail с внешним ключом-col без сохраненного Prod.no не будет сохранен (= insert), но он сохранен. Вы можете сделать наоборот. Почему?

, поэтому я пробую это на mysql workbanch.

ОШИБКА 1452: 1452: Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено Произошла ОШИБКА

Почему в JPA нет ошибок?

вот мои коды

, пожалуйста, помогите мне. (если вы кореец? пожалуйста, поговорите со мной в KOR) спасибо ~

@Entity
public class Prod {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "no")
    private Long no;
    private String name;
    private String thumbnailUrl;
    private Long originPrice;
    private Long discPrice;
    private String description;
    private LocalDateTime createdAt;
    @Transient
    private boolean inBasket;
}
-----------------------------------------------------
@Entity
public class ProdDetail {

    @Id
    @GeneratedValue
    private Long id;
    private String content;
    private String imageUrl;
    private LocalDateTime createdAt;

    @PrePersist
    public void createdAt() {
        this.createdAt = LocalDateTime.now();
    }

    @ManyToOne
    @JoinColumn(name="prod_no" )
    private Prod prod;

-----------------------------------------------------


    // jUnit test
    @Test
        public void insertTodetailTest() {
            ProdDetail pd = new ProdDetail();
            pd.setContent("test product 1");
            pd.setImageUrl("test Product url");
            detailRepo.save(pd);
            System.out.println("ok");
        }

1 Ответ

0 голосов
/ 25 марта 2020

С чего бы это не получилось? Ограничение говорит: «столбец prod_detail должен соответствовать некоторому значению в столбце prod (no)». Однако не говорит: «prod_detail должно быть предоставлено».

Добавьте ограничение NOT NULL к prod_detail (@JoinColumn(nullable = false)), а также проверку времени выполнения @ManyToOne(optional = false), и проблема должна исчезнуть go.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...