【发布时间】:2021-12-27 21:49:31
【问题描述】:
我正在使用带有 manyToMany 关系的休眠,我想显示来自数据库的数据
提前谢谢你。
我得到这个错误:
database :
代码如下:
Class EnseignerId :
@Embeddable
public class EnseignerId implements Serializable {
//id professeur
@Column(name="professeur_code")
private int code;
//id matiere
@Column(name="matiere_reference")
private String reference;
public EnseignerId() {
super();
}
//getters and setters...
Class Enseigner :
@Entity
@Table(name="Enseigner")
public class Enseigner {
@EmbeddedId
private EnseignerId id = new EnseignerId();
//id prof
@ManyToOne
@MapsId("code")
private Professeur professeur;
//id matiere
@ManyToOne
@MapsId("reference")
private Matiere matiere;
@Column(name="heures")
private int heures;
//constructor getters and setters...
Class Professeur:
@Entity
@Table(name="professeur")
public class Professeur {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="code")
private int code ;
@Column(name="nom")
private String nom;
@Column(name="prenom")
private String prenom;
...
@OneToMany(
mappedBy="professeur",
cascade = CascadeType.ALL,
orphanRemoval = true)
private List<Enseigner> matieres; //List<Association> Class; //I followed a tutorial
//constructor getters and setters...
public List<Enseigner> getMatieres() {
return matieres;
}
Class Matiere :
@Entity
@Table(name="matiere")
public class Matiere {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="reference")
private String reference;
@Column(name="description")
String description;
@Column(name="volume")
int volume;
@OneToMany(
mappedBy= "matiere",
cascade = CascadeType.ALL,
orphanRemoval = true)
private List<Enseigner> professeurs;
//constructor getters and setters...
getProfesseur() method :
public Professeur getProfesseur(int code) {
SessionFactory sessionFactory = getSessionFactory(); //static method
Session session = sessionFactory.openSession();
Professeur professeur = null;
try {
session.getTransaction().begin();
System.out.println("------------Calling getProfesseur()----------");
professeur = session.get(Professeur.class, code);
if(professeur != null) {
System.out.println(professeur);
}else {
throw new DAOException( "CODE INVALIDE!" );
}
}
catch(Exception e ) {
System.out.println(e.getMessage());
}
finally {
session.close();
}
return professeur;
}
保存数据并获得没有Matiere工作的教授。但是当我执行以下操作时,获取主键存在于连接表 Enseigner 中的 Matiere 或 professeur 会产生错误:
Professeur prof =profDAO.getProfesseur(2); //*generates errors* //the professor with id=2 exists in database
System.out.println(prof);
List<Enseigner> enseigner = prof.getMatieres(); //*generates errors*...
List<Matiere> matieres = new ArrayList<>();
for(Enseigner ens : enseigner) {
matieres.add(ens.getMatiere());
System.out.println(ens);
}
/*for(Matiere mat : matieres) {
System.out.println(mat);
}*/
【问题讨论】:
标签: database hibernate many-to-many hql java-ee-6