Композитный ключ JPA, содержащий иностранный ключ со DB-сгенерированным значениемJAVA

Программисты JAVA общаются здесь
Anonymous
Композитный ключ JPA, содержащий иностранный ключ со DB-сгенерированным значением

Сообщение Anonymous »

схема < /h4>

Код: Выделить всё

CREATE TABLE Template (
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
-- omitted
);

CREATE TABLE TemplateLabel (
template_id UUID REFERENCES Template(id) ON DELETE CASCADE,
code TEXT NOT NULL,
-- omitted

PRIMARY KEY (template_id, code)
);
< /code>
Шаблон имеет отношение к одно-кому с TemplateLabel. TemplateLabel использует Template.id и код в качестве составного первичного ключа. .java: < /p>
@Entity
public class Template {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;

@OneToMany(mappedBy = "template", cascade = CascadeType.ALL, orphanRemoval = true)
private List labels;
}
< /code>
templateLabel.java:
 написан@Entity
public class TemplateLabel {
@EmbeddedId
private TemplateLabelId id;

@ManyToOne(fetch = FetchType.LAZY)
@MapsId("templateId")
@JoinColumn(name = "template_id")
private Template template;
}
< /code>
templateLabelid.java:
@Embeddable
public class TemplateLabelId {
@Column(name = "template_id")
private UUID templateId;

private String code;
}
< /code>
 проблема < /h4>
Я хотел бы генерировать идентификаторы из базы данных, а не из кода, и предпочтительно настроить объекты таким образом, чтобы, чтобы, чтобы, чтобы, чтобы, чтобы Я могу вставить шаблон и некоторые метки шаблонов в базу данных только с одним вызовом к репозиторию. -Пописывают его некоторыми метками (каждая с id.templateid = null) и просто вызовет репозиторие. Шаблон для получения идентификатора, сгенерированного DB, а затем Manully присваивает этот идентификатор всем меткам, а затем вызовет репозиторию. /p>

вызван: java.lang.illegalargumentException: не может установить java.util.uuid field my.project.entity.templateLabelid.templateid to org.hibernate.id .IdentIfierGeneratorHelper $ 1

Я видел то же исключение, которое обсуждалось в другом посте, но решение было использовать @embeddedid 
, которое я уже уже Использование, поэтому мне интересно, что еще я должен изменить в своих сущностях. Мой класс TemplateLabel необходим.
однонаправленное связывание, вероятно, предпочтительнее, так как никогда не будет случая, когда я бы получил метку самостоятельно, но я не уверен, смогу ли я достичь одного хранилища. объяснил выше без него. Я также хотел бы удалить его и просто использовать Uuid, если смогу, чтобы все было просто. Но это более незначительная проблема (и кажется, что это тоже может быть менее эффективным?).

Подробнее здесь: https://stackoverflow.com/questions/794 ... ated-value

Вернуться в «JAVA»