У меня проблема с пониманием гибернации на many-to-many
part :(.
Я пытаюсь создать несколько таблиц, но не знаю, как создать эффективные отношения между ними.
I есть таблица UserCurs
и OrarCurs
, а затем у меня есть промежуточная таблица Prezenta
.
Итак, вот моя структура.
UserCursID
import javax.persistence.Embeddable;
import javax.persistence.ManyToOne;
@Embeddable
public class UserCursID implements java.io.Serializable {
private static final long serialVersionUID = -9120607274421816301L;
private User user;
private Curs cs;
@ManyToOne
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@ManyToOne
public Curs getCs() {
return cs;
}
public void setCs(Curs cs) {
this.cs = cs;
}
}
UserCurs (который также является промежуточной таблицей от User и Curs):
@Entity
@Table(name="user_curs")
@AssociationOverrides({
@AssociationOverride(name="pk.user", joinColumns = @JoinColumn(name="id_user")),
@AssociationOverride(name="pk.cs", joinColumns = @JoinColumn(name="id_curs"))
})
public class UserCurs implements java.io.Serializable {
private static final long serialVersionUID = 4050660680047579957L;
private UserCursID pk = new UserCursID();
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer uc_id;
public Integer getUc_id() {
return uc_id;
}
public void setUc_id(Integer uc_id) {
this.uc_id = uc_id;
}
@EmbeddedId
public UserCursID getPk() {
return pk;
}
public void setPk(UserCursID pk) {
this.pk = pk;
}
}
OrarCurs:
@Entity
@Table(name="OrarCurs")
public class OrarCurs {
@Id
@Column(name="oc_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer oc_id;
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.PERSIST})
@JoinColumn(name="curs_id")
private Curs orarcurs;
@Column(name="data_curs")
private Date dataCurs;
public Integer getOc_id() {
return oc_id;
}
public void setOc_id(Integer oc_id) {
this.oc_id = oc_id;
}
public Curs getOrarcurs() {
return orarcurs;
}
public void setOrarcurs(Curs orarcurs) {
this.orarcurs = orarcurs;
}
public Date getDataCurs() {
return dataCurs;
}
public void setDataCurs(Date dataCurs) {
this.dataCurs = dataCurs;
}
}
и PrezentaID:
import javax.persistence.Embeddable;
import javax.persistence.ManyToOne;
@Embeddable
public class PrezentaID implements java.io.Serializable{
private static final long serialVersionUID = -9120607274421816301L;
private UserCurs usercurs;
private OrarCurs orar;
@ManyToOne
public UserCurs getUserCurs() {
return usercurs;
}
public void setUserCurs(UserCurs usercurs) {
this.usercurs = usercurs;
}
@ManyToOne
public OrarCurs getOrar() {
return orar;
}
public void setOrar(OrarCurs orar) {
this.orar = orar;
}
}
с классом Prezenta:
@Entity
@Table(name="prezenta")
@AssociationOverrides({
@AssociationOverride(name="pk1.usercurs", joinColumns = @JoinColumn(name="id_usercurs", referencedColumnName="usercurs_id")),
@AssociationOverride(name="pk1.orar", joinColumns = @JoinColumn(name="id_orar", referencedColumnName="oc_id"))
})
public class Prezenta implements java.io.Serializable{
private static final long serialVersionUID = 4050660680047579957L;
private PrezentaID pk1 = new PrezentaID();
private Boolean Present;
@EmbeddedId
public PrezentaID getPk1() {
return pk1;
}
public Boolean getPresent() {
return Present;
}
public void setPresent(Boolean present) {
Present = present;
}
public void setPk1(PrezentaID pk1) {
this.pk1 = pk1;
}
}
После запуска main.class все в порядке, все таблицы созданы, но в моей таблице Prezenta добавлены эти три столбца
Hibernate: alter table prezenta add constraint FK_8ndmk871bbblvtt50y0qhrvl7 foreign key (id_orar) references OrarCurs (oc_id)
Hibernate: alter table prezenta add constraint FK_8vv4yxxpxc85vew0ox779r2kn foreign key (userCurs_id_curs, userCurs_id_user) references user_curs (id_curs, id_user)
В основном, таблица имеет столбцы: id_orar
, userCurs_id_curs
, userCurs_id_user
, но я не хочу, чтобы последние 2 столбца, я хочу вместо них один столбец, соответствующий до uc_id
(с UserCurs
), и я понятия не имею, как это сделать.