Tenir compte le tableau suivant:Est-il recommandé de synchroniser les propriétés de colonne redondantes avec des associations dans les implémentations JPA 1.0 @IdClass?
CREATE TABLE Participations
(
roster_id INTEGER NOT NULL,
round_id INTEGER NOT NULL,
ordinal_nbr SMALLINT NOT NULL ,
was_withdrawn BOOLEAN NOT NULL,
PRIMARY KEY (roster_id, round_id, ordinal_nbr),
CONSTRAINT participations_rosters_fk FOREIGN KEY (roster_id) REFERENCES Rosters (id),
CONSTRAINT participations_groups_fk FOREIGN KEY (round_id, ordinal_nbr) REFERENCES Groups (round_id , ordinal_nbr)
)
Ici, la classe entité @IdClass JPA 1.0:
@Entity
@Table(name = "Participations")
@IdClass(value = ParticipationId.class)
public class Participation implements Serializable
{
@Id
@Column(name = "roster_id", insertable = false, updatable = false)
private Integer rosterId;
@Id
@Column(name = "round_id", insertable = false, updatable = false)
private Integer roundId;
@Id
@Column(name = "ordinal_nbr", insertable = false, updatable = false)
private Integer ordinalNbr;
@Column(name = "was_withdrawn")
private Boolean wasWithdrawn;
@ManyToOne
@JoinColumn(name = "roster_id", referencedColumnName = "id")
private Roster roster = null;
@ManyToOne
@JoinColumns(value = {@JoinColumn(name = "round_id", referencedColumnName = "round_id"), @JoinColumn(name = "ordinal_nbr", referencedColumnName = "ordinal_nbr")})
private Group group = null;
public Participation()
{
}
public Integer getRosterId()
{
return rosterId;
}
public void setRosterId(Integer rosterId)
{
this.rosterId = rosterId;
}
public Integer getRoundId()
{
return roundId;
}
public void setRoundId(Integer roundId)
{
this.roundId = roundId;
}
public Integer getOrdinalNbr()
{
return ordinalNbr;
}
public void setOrdinalNbr(Integer ordinalNbr)
{
this.ordinalNbr = ordinalNbr;
}
public Boolean getWasWithdrawn()
{
return wasWithdrawn;
}
public void setWasWithdrawn(Boolean wasWithdrawn)
{
this.wasWithdrawn = wasWithdrawn;
}
public Roster getRoster()
{
return roster;
}
// ???
public void setRoster(Roster roster)
{
this.roster = roster;
}
public Group getGroup()
{
return group;
}
// ???
public void setGroup(Group group)
{
this.group = group;
}
...
}
En général, si les setters d'association synchroniser avec les champs redondants, ici rosterId, roundId et ordinalNbr ?:
// ???
public void setGroup(Group group)
{
this.group = group;
this.roundId = group.getRoundId();
this.ordinalNbr = group.getOrdinalNbr();
}
Merci
Pourquoi la clé primaire ne peut-elle pas être modifiée? Que se passe-t-il si une femme se marie et que le PK est une combinaison du prénom, du nom de famille et de la date de naissance? Je n'achète pas vraiment les arguments généraux que les PK ne peuvent pas changer. Les ID peuvent ne pas avoir à changer, mais c'est juste un type de PK ... – Kawu