• Now all data be ready for publish, We had made our blog alive now. Haha.



  • These days CCP GFW blocked all the IPs from US and when I switch my IP in google Cloud, the disk data cannot be restore again. I have to restart my blog totally, Now the website is still building…



Mapping ManyToMany with composite Primary key and Annotation:- Stack Overflow

Java PingBook 2 months ago (10-23) 19 0

Question

I’m trying to create manytomany realation between Student and Teaching Course using Composite Primary key:

my classes:

@Entity
@Table(name=”Student_mtm_cId”)
public class Student {

private String id;
private Set teachingClasses = new HashSet();

@OneToMany(fetch = FetchType.LAZY, mappedBy = “pk.student”)
public Set getTeachingClasses() {
return teachingClasses;
}
public void setTeachingClasses(Set teachingClasses) {
this.teachingClasses = teachingClasses;
}

public void addStudentToClass(TeachingClass teachingClass){
StudentTClass studentTClass = new StudentTClass();
studentTClass.setStudent(this);
studentTClass.setTeachingClass(teachingClass);
teachingClasses.add(studentTClass);
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

@Id @GeneratedValue(generator=”system-uuid”)
@GenericGenerator(name=”system-uuid”, strategy = “uuid”)
@Column(name = “student_id”, nullable = false)
public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

//all other setters and getters and isequal/hashCode omitted.
}

TeachingClass:

@Entity
@Table(name=”TechingClass_MTM”)
public class TeachingClass {

private String id;
private String name;
private String description;
private Set teachingClasses = new HashSet();

public TeachingClass(){}

public TeachingClass(String name, String description) {
super();
this.name = name;
this.description = description;
}

public void addStudentToClass(Student student){
StudentTClass studentTClass = new StudentTClass();
studentTClass.setStudent(student);
studentTClass.setTeachingClass(this);
teachingClasses.add(studentTClass);
}

@OneToMany(fetch = FetchType.LAZY, mappedBy = “pk.teachingClass”)
public Set getTeachingClasses() {
return teachingClasses;
}

public void setTeachingClasses(Set teachingClasses) {
this.teachingClasses = teachingClasses;
}

public void setDescription(String description) {
this.description = description;
}

@Id @GeneratedValue(generator=”system-uuid”)
@GenericGenerator(name=”system-uuid”, strategy = “uuid”)
@Column(name = “teachingClass_id”, nullable = false)
public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}

Collection Objects:

@Entity
@Table(name = “student_TClass_MTM”)
@AssociationOverrides({
@AssociationOverride(name = “pk.student”, joinColumns = @JoinColumn(name = “student_id”)),
@AssociationOverride(name = “pk.teachingClass”, joinColumns = @JoinColumn(name = “teachingClass_id”))
})
public class StudentTClass {

@EmbeddedId
private StudentTClassPK pk = new StudentTClassPK();

public StudentTClassPK getPk() {
return pk;
}

public void setPk(StudentTClassPK pk) {
this.pk = pk;
}

public StudentTClass() {}

@Transient
public Student getStudent(){
return this.pk.getStudent();
}

@Transient
public TeachingClass getTeachingClass(){
return this.pk.getTeachingClass();
}

public void setStudent(Student student){
this.pk.setStudent(student);
}

public void setTeachingClass(TeachingClass teachingClass){
this.pk.setTeachingClass(teachingClass);
}

}

Now The primary Key:

@Embeddable
public class StudentTClassPK implements Serializable{

private static final long serialVersionUID = -7261887879839337877L;
private Student student;
private TeachingClass teachingClass;

@ManyToOne
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}

@ManyToOne
public TeachingClass getTeachingClass() {
return teachingClass;
}
public void setTeachingClass(TeachingClass teachingClass) {
this.teachingClass = teachingClass;
}
public StudentTClassPK(Student student, TeachingClass teachingClass) {
this.student = student;
this.teachingClass = teachingClass;
}
public StudentTClassPK() {}

}

When I’m trying to Persist Student I got the following error:

Caused by: org.hibernate.MappingException: Could not determine type for: com.vanilla.objects.Student, at table: student_TClass_MTM, for columns: [org.hibernate.mapping.Column(student)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:306)
at org.hibernate.tuple.PropertyFactory.buildStandardProperty(PropertyFactory.java:143)
at org.hibernate.tuple.component.ComponentMetamodel.(ComponentMetamodel.java:68)
at org.hibernate.mapping.Component.buildType(Component.java:184)
at org.hibernate.mapping.Component.getType(Component.java:177)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:290)
at org.hibernate.mapping.RootClass.validate(RootClass.java:236)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1362)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:855)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:774)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
… 51 more

What am I doing wrong?

Answer

I solved this issue. I mapped Getter instead of field.

public class StudentTClass {

//@EmbeddedId
private StudentTClassPK pk = new StudentTClassPK();

@EmbeddedId
public StudentTClassPK getPk() {
return pk;
}




Copyright from PingBook Blog, If not specified, they are original. This site uses BY-NC-SAProtocol authenticated.
For reprinting, please indicate the link of the original text:Mapping ManyToMany with composite Primary key and Annotation:- Stack Overflow
LIKE (0)
[1725641479@qq.com]
SHARE (0)
PingBook
Author:
We create, We sharing! Tag every value data your sharing
Submit comments
Cancel comments
emoji picture bold strikethrough center italic check in

Hi,you need to provide your name and email adress!

  • Name (Required)
  • Email (Required)
  • Website