JPA eclipselink сохраняет объект, который не имеет первичного ключа, но имеет два внешних ключа

Я очень новичок в java EE и изучаю его самостоятельно, поэтому, пожалуйста, будьте терпеливы со мной. Пока у меня есть 3 простые таблицы в моей базе данных:

Продажи Продукты Sale_id Идантификационный номер продукта
Распродажа_детали Салеид_фк Productid_fk (фк) Количество_продано

Как сохранить новый объект sale_details без создания объекта sale_details. Потому что Java не позволяет мне называть sale_details как @Entity без первичного ключа. этот текущий код дает мне сообщение об ошибке, в котором говорится, что мне нужно объявить первичный ключ. Я попытался использовать Idclass на основе ответов на stackoverflow, но он ничего не делает.

@Entity
@Table(name = "sale_details")
@IdClass(value = SaleDetails.class)
public class SaleDetails implements Serializable {

    @Column(name = "saleid_fk")
    private int saleid_fk;

    @Column(name = "productid_fk")
    private String productid_fk;

    @Column(name = "quantity_sold")
    private int quantity_sold;

что мне здесь не хватает?

Можете ли вы поделиться точными определениями таблиц? В частности: можете ли вы проверить, что пара (Sale_id, Product_id) на столе sale_details защищена ограничением UNIQUE? --- Комментарий к коду: Имена столбцов в классе SaleDetails не совпадают с именами столбцов в таблице sale_details.

Turing85 25.12.2020 02:47

@ Turing85 Я опубликовал определение таблицы, я вручную ввожу диаграммы таблиц, поэтому они не совпадают, приношу свои извинения за путаницу. Sale_id и Product_id не уникальны, потому что может быть несколько sale_details для одного sane_id и/или несколько sale_details для одного продукта.

asdaf rwgafe 25.12.2020 03:11

В этом случае пара (saleid_fk, quantity_sold) уникальна и может использоваться для JPA @EmbeddedId или @IdClass. Смотрите эту статью на Baelung для деталей.

Turing85 25.12.2020 03:19

Примечание: я сомневаюсь в решении сделать пару (saleid_fk, quantity_sold) уникальной. Что делать, если два отдельных товара продаются на одной и той же распродаже в одном и том же количестве? Нынешняя структура не допускает такого сценария.

Turing85 25.12.2020 03:27

@ Turing85 Не так ли? У них будут одинаковые sale_id и количество, но разные Product_id. Я попробовал Idclass и получил эту ошибку: Описание исключения: Недопустимая спецификация составного первичного ключа. Имена полей или свойств первичного ключа в классе первичного ключа [com.owl.server.objects.SaleDetails] и в классе объектного компонента [class com.owl.server.objects.SaleDetails] должны совпадать, а их типы должны быть таким же.

asdaf rwgafe 25.12.2020 03:32
SaleDetails должен быть не классом первичного ключа, а пользователем класса первичного ключа. Для более точного анализа нам нужно было бы увидеть код. Это, однако, другой вопрос и мы должны ограничиться одним вопросом на пост
Turing85 25.12.2020 03:32

@ Turing85 Хорошо, спасибо за помощь.

asdaf rwgafe 25.12.2020 03:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
140
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто установить первичный идентификатор как автоинкремент и не использовать его.

Другие вопросы по теме