При добавлении родителя и потомка с отношением @ OneToOne с одним и тем же ключом я продолжаю получать эту ошибку. Рекомендуется использовать @MapsId.
id.IdentifierGenerationException: попытка назначить id из нуля однозначное свойство
Обычные решения I пробовал, но это не решило проблему.
- Наличие как родительской, так и дочерней точки указывает друг на друга
- Правильная транзакционная (являющаяся Springframework)
- Сохранение с использованием репо владельца. Это не работает из-за нарушения верхнего ограничения.
Моя родительская сущность (с именами, имеющими цель):
@Entity
@Table(name = "JOHAN_SHARED_SUPPLIER")
public class EntitySharedSupplier {
@Id
@Column(name = "supplier_shared_id")
private Long javaSharedSupplierId;
@Column(name = "supplier_shared_name")
private String javaSharedSupplierName;
@Column(name = "contact_shared_name")
private String javaSharedSupplierContactName;
@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY,
mappedBy = "supplierSharedRef", orphanRemoval = true)
private EntitySharedProduct javaSharedProduct;
Дочерний:
@Entity
@Table(name = "JOHAN_SHARED_PRODUCTS")
public class EntitySharedProduct {
@Id
@Column(name = "shared_supplier_id")
private Long javaSupplierSharedId;
@MapsId
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="shared_supplier_id")
private EntitySharedSupplier supplierSharedRef;
@Column(name = "prod_supplier_name")
private String javaSharedProductName;
Репо родительского объекта:
@Repository
@Transactional
public interface SupplierSharedRepo extends JpaRepository<EntitySharedSupplier, Long> {
}
Код услуги:
@Transactional
public void saveSupplier(int sup) {
EntitySharedSupplier supplier = new EntitySharedSupplier();
supplier.setJavaSharedSupplierId((long) sup);
supplier.setJavaSharedSupplierName("SharedSupplier-" + sup);
supplier.setJavaSharedSupplierContactName("SharedSupplier-contact-" + sup);
EntitySharedProduct product = new EntitySharedProduct();
product.setJavaSharedProductName("SharedSupplier-Book-" + sup);
product.setSupplierSharedRef(supplier);
supplier.setJavaSharedProduct( product);
supplierSharedRepo.save(supplier);
}