Cómo Insertar Datos En Varias Tablas Utilizando La Clave Externa De La Primavera De Inicio De Java MySQL

Intento crear POS, Sistema utilizando la Primavera de Arranque y JavaFX. Entonces me normalizado de mis tablas. Entonces, puedo crear principal de la tabla --> "Tabla" y sub tabla --> "el Proveedor","Elemento de la Categoría", Elemento de la Marca",..... Por lo tanto, podría conectar un sub de la tabla a la Tabla del Artículo, no puedo conectarme todos los sub tablas Tabla del Artículo.

Yo uso @ManyToOne para conectar estas tablas.

"Elemento De La Tabla"

@Entity
@Table(name="Item")
public class Item {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "item_serial_number_id", nullable = false)
    private int item_serial_number_id;

    private String item_serial_number;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "item_brand_id")
    private Item_Brand item_brand_map;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "supplier_id")
    private Supplier supplier_map;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "item_category_id")
    private Item_Category item_category_map;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "item_sell_amount_id")
    private Item_Sell_Amount item_sell_amount_map;

    @OneToMany(mappedBy="main_item_map")
    private Set<Main_Table> main_table_item;

    private double item_discounts;
    private double item_buy_amount;
    private String item_warranty_hardware;
    private String item_warranty_software;
    private Blob item_qrcode;
    private boolean item_sold;
    private boolean item_expire;
    private int item_repair;

"Item_Brand" tabla

@Entity
@Table(name="Item_Brand")
public class Item_Brand {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "item_brand_id", nullable = false)
    private int item_brand_id;

    private String item_brand_name;

    @OneToMany(mappedBy="item_brand_map",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
    private Set<Item> item_item_brand;

"Item_Sell_Amount" tabla

@Entity
@Table(name="Item_Sell_Amount")
public class Item_Sell_Amount {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "item_sell_amount_id", nullable = false)
    private int item_sell_amount_id;

    private double item_sell_amount_value;
    private double item_down_payment;
    private double item_monthly_payment;
    private double item_interes;

Así, los Extranjeros en las estructuras de las tablas son de este tipo y Cuando me guarde Artículo, yo uso este código de abajo,

Item_Sell_Amount item_sell_amount = getSavedItemSellAmount();

        Item item = new Item();
        item.setItem_serial_number(getSerialNumber());
        item.setItem_category_map(item_category);
        item.setItem_brand_map(item_brand);
        item.setItem_buy_amount(getBuyAmount());
        item.setItem_sell_amount_map(item_sell_amount);
        item.setItem_discounts(getDiscount());
        item.setSupplier_map(supplier);
        item.setItem_warranty_hardware(getHardwareWarranty());
        item.setItem_warranty_software(getSoftwareWarranty());
        item.setItem_qrcode(getQRCodeImage());
        item.setItem_sold(false);
        item.setItem_expire(false);
        //item.setItem_repair(0);

        Set<Item> itemSet = new HashSet();
        itemSet.add(item);
        item_sell_amount.setItem_sell_amount(itemSet);
        item_sell_amountService.save(item_sell_amount);

Elemento de Servicio como este.

@Service
public class ItemServiceImpl implements ItemService {

    @Autowired
    private ItemRepository itemRepository;

    @Override
    public Item save(Item entity) {
        return itemRepository.save(entity);
    }

    @Override
    public Item update(Item entity) {
        return itemRepository.save(entity);
    }

    @Override
    public void delete(Item entity) {
        itemRepository.delete(entity);
    }

    @Override
    public void deleteInBatch(List<Item> items) {
        itemRepository.deleteInBatch(items);
    }

    @Override
    public List<Item> findAll() {
            List<Item> list = new ArrayList<>();
        itemRepository.findAll().forEach(e -> list.add(e));
            return list;
    }

    @Override
    public Item find(int id) {
        //return companyRepository.findOne(id);
        return null;
    }

Al guardar una Tabla externa sin errores, Pero esta vez, aparecen errores de abajo,

Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: