@ Column inserível, atualizável não vai bem com o Spring JPA?

Cenário: Eu tenho 3 tabelas, Oferta, Canal e Oferta_Canais. Basicamente, Channel é uma tabela de pesquisa, ou seja, os valores nessa tabela não podem ser inseridos nem atualizados pelo aplicativo. Uma oferta pode conter um ou vários canais. Eu uso os valores da tabela Channel para preencher as caixas de seleção dinâmicas. De qualquer forma, então aqui está o que eu tenho:

@Entity
@Table(name = "OFFER")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Offer implements Serializable {

    // Offer Id
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "offer_seq_gen")
    @Column(name = "OFFER_ID")
    private long OfferId;


    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "OFFER_CHANNELS", joinColumns = { @JoinColumn(name = "OFFER_ID") },          inverseJoinColumns = { @JoinColumn(name = "CHANNEL_ID") })
    private Set<Channel> channels = new HashSet<Channel>();

  //Other fields and corresponding getters and setters

}

Aqui está a entidade do canal:

@Entity
@Table(name = "CHANNEL")
public class Channel implements Serializable {

    private static final long serialVersionUID = 1L;

    @NotNull
    @Id
    @Column(name = "CHANNEL_ID", insertable=false, updatable=false)
    private Long channelId;

    @Column(name = "CHANNEL_NAME", insertable=false, updatable=false)
    private String channelName;

//getters and setters

}

Agora, quando um usuário cria uma oferta, eu preciso inserir linha nas tabelas Offer table e Offer_Channels e não fazer nada (sem atualizações / inserções) para a tabela Channel. Inicialmente, os três aconteciam; portanto, para obter a parte "não fazer nada na tabela de canais", coloquei insertable = false e atualizável = false nas colunas da tabela Channel e isso funcionou como um encanto. Agora eu usei o Hibernates simples para isso. Quero dizer, escrevi um aplicativo java independente e uma classe principal para adicionar uma oferta usando o session.save (offer) do hibernate. Ele executou as seguintes consultas:

  Hibernate: insert into OFFER 
  Hibernate: insert into OFFER_CHANNELS 

Tudo bem, agora, eu tenho um serviço de descanso onde estou usando o repositório JPA do Spring para salvar as informações e tenho a mesma configuração de objetos de domínio. Agora, quando adiciono uma oferta, ela é executada:

Hibernate: insert into OFFER 
Hibernate: insert into CHANNEL ( It is failing here obviously. I don't want this step to happen)

Minha pergunta: 1. Por que ele está tentando escrever algo na tabela Channel, mesmo que eu tenha inserido insertable = false em seu objeto de domínio, e isso só está acontecendo com a instalação do Spring JPA. Com a configuração de hibernação, simplesmente funciona bem. 3. O @ JoinTable / @OneToMany / insertable / updateble não funciona bem com o repositório Spring JPA? O que estou perdendo aqui ?

ATUALIZAR :

@Service
@Transactional
public class OfferService {

    @Inject
    private OfferRepository offerRepository;


    public Offer saveOfferInformation(Offer offer) {
        log.debug("Saving Offer Info..");
        log.debug("Offer object :"+offer);
        return offerRepository.save(offer);

    }

}

Repo:

public interface OfferRepository extends JpaRepository<Offer, Long> {
    List<Offer> findByBuySku(String buySku);
}

E no serviço REST, estou apenas injetando o serviço e chamando-o, para que não haja lógica comercial no serviço REST. No momento, estou recebendo e o motivo é que ele está tentando inserir um registro na tabela Channel:

 exception: "org.springframework.dao.DataIntegrityViolationException" 
 message: "could not execute statement; SQL [n/a]; constraint [PVS_OWNER.CHANNEL_PK]; nested   exception is org.hibernate.exception.ConstraintViolationException: could not execute statement"

questionAnswers(0)

yourAnswerToTheQuestion