Внешний ключ не сохранен в спящем режиме - PullRequest
0 голосов
/ 23 мая 2018

В проекте весенней загрузки 2 с hibernate и jpa,

Я пытаюсь сохранить какой-то объект

@Embeddable
public class EmbedddedSamplesKey implements Serializable {

    private Integer id;
    private int year;
    ...
}

@Entity
@IdClass(EmbedddedSamplesKey.class)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Samplings {

    @Id
    @GeneratedValue
    private Integer id;

    @Id
    private int year;

    @OneToMany(mappedBy = "sampling", cascade = CascadeType.PERSIST, orphanRemoval = true)
    private List<Samples> samples = new ArrayList<>();

    public void addSample(Samples sample) {
      samples.add(sample);
      sample.setSampling(this);
    }

    public void removeSample(Samples sample) {
      samples.remove(sample);
      sample.setSampling(null);
    }

    ...
}

@Entity
public class Samples extends BaseEntity {
    @Id
    @SequenceGenerator(name = "samples_id_seq", sequenceName = "samples_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "samples_id_seq")
    private Integer id;

    private String letter;

    //@OneToOne(optional = false, cascade = CascadeType.PERSIST)
    //private TestSamples testSamples;

    @ManyToOne
    private Samplings sampling;
    ...
}

Когда я сохраняю выборку, я вижу в таблице образцов затем

sampling_id sampling_year

не являются фидом

Это должна быть работа orm, чтобы сделать это?

В примерах, orm сгенерировал это

ALTER TABLE samples
  ADD CONSTRAINT fkq5if151jgtlcy7yfp55ffvf47 FOREIGN KEY (sampling_id, sampling_year)
  REFERENCES samplings (id, year)
  ON UPDATE NO ACTION
  ON DELETE NO ACTION;

Редактировать, пробовал

@ManyToOne
@JoinColumns({
    @JoinColumn(name = "sampling_id", referencedColumnName = "id"),
    @JoinColumn(name = "sampling_year", referencedColumnName = "year")})
private Samplings sampling;

, но тот же результат

Кроме того, если в примерах я хотел бы использовать как выборка первичного + буква поля, как первичный ключ, есть ли способ сделатьэто?

Ответы [ 4 ]

0 голосов
/ 27 мая 2018

это возможно вопреки тому, что говорит Николас

, просто посмотрите на этот пример

https://github.com/hibernate/hibernate-orm/blob/ceaeb81e3362ff187004ea3479b2afeeba5aa8a6/documentation/src/test/java/org/hibernate/userguide/mapping/identifier/IdClassGeneratedValueTest.java#L77

Перейдите на cascade.all, это должно помочь ... вероятно, вы получите данные дляобъединение вместо постоянства.

может быть проблема с загрузкой весной?

0 голосов
/ 24 мая 2018

Возможно, не самый лучший ответ, но лучше подождать 3 месяца, чтобы получить ответ .... время - деньги

Если не знаете, нужно выполнить какую-либо специальную операцию над последовательностью ....

просто используйте последовательность, добавьте временное поле, которое будет последовательностью + год ....

0 голосов
/ 26 мая 2018

На первый взгляд, я не думаю, что вы можете использовать @GeneratedValue с @ IdClass.

Автоматическое увеличение не работает для класса Entity с составным ключом

0 голосов
/ 23 мая 2018

Я думаю, что вам не хватает аннотации @JoinColumn:

@ManyToOne
@JoinColumn(name = "sampling")
private Samplings sampling;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...