@ Вставляемая колонка, updateble не подходят для Spring JPA?

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

@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

}

Вот сущность канала:

@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

}

Теперь, когда пользователь создает предложение, мне нужно вставить строку в таблицу предложений и таблицы Offer_Channels и ничего не делать (без обновлений / вставок) для таблицы каналов. Изначально все три происходило, поэтому для достижения части «ничего не делать с таблицей каналов» я вставил вставки = false и updateable = false в столбцы таблицы каналов, и это сработало как шарм. Теперь я использовал простые спящие для этого. Я имею в виду, что я написал отдельное Java-приложение и основной класс, чтобы добавить предложение с использованием session.save hibernate (offer). Запущены следующие запросы:

  Hibernate: insert into OFFER 
  Hibernate: insert into OFFER_CHANNELS 

Хорошо, теперь у меня есть служба отдыха, где я использую репозиторий Spring JPA для сохранения информации, и у меня установлены те же доменные объекты. Теперь, когда я добавляю предложение, оно запускается:

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

Мой вопрос: 1. Почему он пытается что-то записать в таблицу Channel, хотя я дал inserttable = false в его доменном объекте, и это происходит только с установкой Spring JPA. С настройкой гибернации он просто отлично работает. 3. Разве @ JoinTable / @OneToMany / inserttable / updateble хорошо работает с репозиторием Spring JPA? Что мне здесь не хватает?

ОБНОВИТЬ :

@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);

    }

}

Репо:

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

А в сервисе REST я просто внедряю сервис и вызываю его, поэтому в сервисе REST нет бизнес-логики. Сейчас я получаю, и причина в том, что он пытается вставить запись в таблицу каналов:

 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"

Ответы на вопрос(0)

Ваш ответ на вопрос