Возможно ли в простых расширениях JPA или JPA + Hibernate объявлять составной ключ, где элемент составного ключа является последовательностью?JPA Composite Key + Sequence
Это мой композитный класс:
@Embeddable
public class IntegrationEJBPk implements Serializable {
//...
@ManyToOne(cascade = {}, fetch = FetchType.EAGER)
@JoinColumn(name = "APPLICATION")
public ApplicationEJB getApplication() {
return application;
}
@Column(name = "ENTITY", unique = false, nullable = false, insertable = true, updatable = true)
public String getEntity() {
return entity;
}
@GeneratedValue(strategy = GenerationType.AUTO, generator = "INTEGRATION_ID_GEN")
@SequenceGenerator(name = "INTEGRATION_ID_GEN", sequenceName = "OMP_INTEGRATION_CANONICAL_SEQ")
@Column(name = "CANONICAL_ID", unique = false, nullable = false, insertable = true, updatable = true)
public String getCanonicalId() {
return canonicalId;
}
@Column(name = "NATIVE_ID", unique = false, nullable = false, insertable = true, updatable = true)
public String getNativeId() {
return nativeId;
}
@Column(name = "NATIVE_KEY", unique = false, nullable = false, insertable = true, updatable = true)
public String getNativeKey() {
return nativeKey;
}
//...
}
Я уже о значениях application
, entity
, nativeId
и nativeKey
. Я хочу, чтобы построить объект, как показано ниже:
IntegrationEJB i1 = new IntegrationEJB();
i1.setIntegrationId(new IntegrationEJBPk());
i1.getIntegrationId().setApplication(app1);
i1.getIntegrationId().setEntity("Entity");
i1.getIntegrationId().setNativeId("Nid");
i1.getIntegrationId().setNativeKey("NK");
И когда я называю em.persist(i1
), я хочу, чтобы canonicalId
генерируется и интеграция вставляется.
Возможно ли это? Если да, то какой простой способ? (Я предпочитаю не использовать ключи, предоставленные приложением или собственный sql).
Возможно. Единственный способ, который я нашел, требует, чтобы части Id не были вставлены или обновляемы. Требуется уточнить устаревший пост, так как это лучший результат в результатах поиска. – Valchris 2011-05-03 02:33:47