Я очень новичок в java EE и изучаю его самостоятельно, поэтому, пожалуйста, будьте терпеливы со мной. Пока у меня есть 3 простые таблицы в моей базе данных:
Как сохранить новый объект 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;
что мне здесь не хватает?
@ Turing85 Я опубликовал определение таблицы, я вручную ввожу диаграммы таблиц, поэтому они не совпадают, приношу свои извинения за путаницу. Sale_id и Product_id не уникальны, потому что может быть несколько sale_details для одного sane_id и/или несколько sale_details для одного продукта.
В этом случае пара (saleid_fk, quantity_sold)
уникальна и может использоваться для JPA @EmbeddedId
или @IdClass
. Смотрите эту статью на Baelung для деталей.
Примечание: я сомневаюсь в решении сделать пару (saleid_fk, quantity_sold)
уникальной. Что делать, если два отдельных товара продаются на одной и той же распродаже в одном и том же количестве? Нынешняя структура не допускает такого сценария.
@ Turing85 Не так ли? У них будут одинаковые sale_id и количество, но разные Product_id. Я попробовал Idclass и получил эту ошибку: Описание исключения: Недопустимая спецификация составного первичного ключа. Имена полей или свойств первичного ключа в классе первичного ключа [com.owl.server.objects.SaleDetails] и в классе объектного компонента [class com.owl.server.objects.SaleDetails] должны совпадать, а их типы должны быть таким же.
SaleDetails
должен быть не классом первичного ключа, а пользователем класса первичного ключа. Для более точного анализа нам нужно было бы увидеть код. Это, однако, другой вопрос и мы должны ограничиться одним вопросом на пост@ Turing85 Хорошо, спасибо за помощь.
Вы можете просто установить первичный идентификатор как автоинкремент и не использовать его.
Можете ли вы поделиться точными определениями таблиц? В частности: можете ли вы проверить, что пара
(Sale_id, Product_id)
на столеsale_details
защищена ограничениемUNIQUE
? --- Комментарий к коду: Имена столбцов в классеSaleDetails
не совпадают с именами столбцов в таблицеsale_details
.