Hibernate composite id de clé de générateur
J'ai mon entités comme ci-dessous.
Mon modèle de données applique ci-dessous et je ne peut pas changer de référentiel itegrity.
Donc je suis coincé avec une clé composite.
Je veux générer automatiquement/utiliser certains générateur de orderId
Oui j'ai lu ci-dessous.
http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-identifier
Je ne veux gérer la génération d'id de processus que ci-dessus recommande l'application générant le n ° de commande.
Comment faire de l'partielle id générateur de travail.. quelles sont mes options..vous serions reconnaissants de certaines pensées par des experts.
@Entity
@Table(name = "Orders", uniqueConstraints = @UniqueConstraint(columnNames = {"partner_ID", "order_ident" }))
public class Order {
private OrderId id;
public Order() {
}
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "partnerId", column = @Column(name = "partner_ID", nullable = false)),
@AttributeOverride(name = "employeeId", column = @Column(name = "employee_ID", nullable = false)),
@AttributeOverride(name = "orderId", column = @Column(name = "order_ID", nullable = false)) })
public OrderId getId() {
return this.id;
}
public void setId(OrderId id) {
this.id = id;
}
}
@Embeddable
public class OrderId extends FactObject {
private int partnerId;
private int employeeId;
private int orderId;
public OrderId() {
}
public OrderId(int partnerId, int employeeId, int orderId) {
this.partnerId = partnerId;
this.employeeId = employeeId;
this.orderId = orderId;
}
@Column(name = "partner_ID", nullable = false)
public int getpartnerId() {
return this.partnerId;
}
public void setpartnerId(int partnerId) {
this.partnerId = partnerId;
}
@Column(name = "employee_ID", nullable = false)
public int getemployeeId() {
return this.employeeId;
}
public void setemployeeId(int employeeId) {
this.employeeId = employeeId;
}
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
@Column(name = "order_ID",insertable=false, nullable=false, updatable=false)
public int getOrderId() {
return this.orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public boolean equals(Object other) {
if ((this == other))
return true;
if ((other == null))
return false;
if (!(other instanceof OrderId))
return false;
OrderId castOther = (OrderId) other;
return (this.getpartnerId() == castOther.getpartnerId())
&& (this.getemployeeId() == castOther.getemployeeId())
&& (this.getOrderId() == castOther.getOrderId());
}
public int hashCode() {
int result = 17;
result = 37 * result + this.getpartnerId();
result = 37 * result + this.getemployeeId();
result = 37 * result + this.getOrderId();
return result;
}
}
Je pense que cette question et la réponse sera aider: stackoverflow.com/questions/6405746/...
Merci pour le lien qui n'a pas aidé comme vous pouvez le voir je suis en train de générer l'id de l'une des 3 colonnes qui constituent la principale clé composite .. En ce moment je m'intéresse à la génération n ° de commande externe et la valeur de l'objet que je n'aime pas .. mais pas beaucoup de traction sur ce post..
Cela peut vous aider: vladmihalcea.com/...
Merci pour le lien qui n'a pas aidé comme vous pouvez le voir je suis en train de générer l'id de l'une des 3 colonnes qui constituent la principale clé composite .. En ce moment je m'intéresse à la génération n ° de commande externe et la valeur de l'objet que je n'aime pas .. mais pas beaucoup de traction sur ce post..
Cela peut vous aider: vladmihalcea.com/...
OriginalL'auteur user973779 | 2011-09-30
Vous devez vous connecter pour publier un commentaire.
J'ai été planant au-dessus de tous les liens possibles sur le World Wide Sites web et d'essayer de trouver pourquoi vous ne pouvez pas utiliser @GeneratedValue avec @EmbeddedId ou @IdClass (c'est à dire composite PKs). La raison en est que vous NE pouvez pas. Une explication fournie ici peut vous aider à vous sentir un peu mieux: JAVA.NET/GLASSFISH
Composite PKs ASSIGNATION à base de non production. Par conséquent, tout @GeneratedValue choses ne sont pas censés travailler avec eux. Je suis aussi d'avoir un problème dans mon projet et je pense qu'il n'y a pas d'autre moyen, à l'EXCEPTION de:
Malheureusement, c'est ce qu'il est (et non de façon grossière, s'il vous plaît ne vous méprenez pas)...Si vous avez une clé composite, cela signifie que vous n'avez pas la clé pour être géré par le conteneur IoC (je veux dire de Printemps, mais il pourrait être le ODBC natif conteneur de trop). À l'inverse, avoir un auto-généré PK signifie que vous êtes en s'appuyant sur le conteneur....ce que j'ai essayé de faire c'est d'aller sur ma tête et révolutionner la façon dont SGBDR de travail...:P...je ne sais pas comment bon j'ai réussi à résumer, mais vous pouvez obtenir plus d'opinions...nous avons fait un remue-méninges dans le bureau et c'est ce que la conclusion était, à peu près!
OriginalL'auteur ha9u63ar
Je pense que cette question de stackoverflow pourrait vous aider. Bien qu'il ait été demandé à des fins différentes, il a la réponse que vous pourriez avoir besoin. Il a utilisé à la fois clé primaire composite et le type de génération.
OriginalL'auteur Ramsharan
N'est pas à l'aide de @IdClass une solution?
On peut utiliser @Id sur chacune des colonnes qui forment la clé primaire et @GeneratedValue et @SequenceGenerator sur l' @colonne Id qui doit être généré par une séquence de.
OriginalL'auteur Hari
Stratégie de génération de clé primaire composite peut être géré par @IdClass. Annoter la classe avec @IdClass pour laquelle vous avez besoin de composite pk. Annoter les champs que faire pour composite pk avec @Id @GeneratedValue. Les travaux de cette.
par exemple,
Dans cet exemple, la combinaison de i et j fonctionnera comme clé primaire composite pour A. Leurs valeurs sont générés automatiquement.
OriginalL'auteur ImNomad