3

First post to stackoverflow, so please excuse if I did not post correctly. I posted a follow-up question with code on an old thread Mapping value in junction table to Entity as I am not able to get the recommended solution to function properly. I am using OpenXava and receive error "Impossible to execute Save action: org.hibernate.PropertyAccessException: could not set a field value by reflection setter of org.openxava.invoicing.model.CourseAssignmentId.course". Any help is appreciated. My code:

User Class:

@Entity
@Table(name="users")
public class User {
    @Id
    @Column(name="pk1")
    private Long id;

    public Long getid() {
        return id;
    }

    public void setid(Long id) {
        this.id = id;
    }

    @Column(name="user_id")
    private String userID;

    public String getuserID(){
        return userID;
    }

    public void setuserID(String userID) {
        this.userID = userID;
    }

    @OneToMany(mappedBy="user")
    private Collection<CourseAssignment> courseAssignments;

    public Collection<CourseAssignment> getcourseAssignments() {
        return courseAssignments;
    }

    public void setcourseAssignments(Collection<CourseAssignment> courseAssignments) {
        this.courseAssignments = courseAssignments;
    }

}

Course Class:

@Entity
@Table(name="courses")
public class Course {

    @Id
    @Column(name="pk1")
    private Long id;

    public Long getid() {
        return id;
    }

    public void setid(Long id) {
        this.id = id;
    }

    @Column(name="course_name")
    private String name;

    public String getname() {
        return name;
    }

    public void setname(String name) {
        this.name = name;
    }   

    @OneToMany(mappedBy = "course")
    private Collection<CourseAssignment> courseAssignments;

    public Collection<CourseAssignment> getcourseAssignments() {
        return courseAssignments;
    }

    public void setcourseAssignments(Collection<CourseAssignment> courseAssignments) {
        this.courseAssignments = courseAssignments;
    }


}

CourseAssignment Class:

@Entity
@Table(name="course_users")
@IdClass(CourseAssignmentId.class)
public class CourseAssignment {

    @Id
    @ManyToOne
    @JoinColumn(name="user_pk1")
    private User user;

    public User getuser() {
        return user;
    }

    public void setuser(User user) {
        this.user = user;
    }

    @Id
    @ManyToOne
    @JoinColumn(name="crsmain_pk1")
    private Course course;

    public Course getcourse() {
        return course;
    }

    public void setcourse(Course course) {
        this.course = course;
    }

    @Column(name="role")
    private String role;

    public String getrole() {
        return role;
    }

    public void setrole(String role) {
        this.role = role;
    }
}

CourseAssignmentId Class:

@Embeddable
public class CourseAssignmentId implements java.io.Serializable {

    private static final long serialVersionUID = 1L;


    @Column(name="user_pk1")
    private Long user;

    public Long getuser() {
        return user;
    }

    public void setuser(Long user) {
        this.user = user;
    }

    @Column(name="crsmain_pk1")
    private Long course;

    public Long getcourse() {
        return course;
    }

    public void setcourse(Long course) {
        this.course = course;
    }   
}
Community
  • 1
  • 1
Sean
  • 65
  • 1
  • 6

1 Answers1

1

Some things to try:

  • Removing the @Embeddable annotation from CourseAssignmentId (I don't think it is appropriate in this context)
  • Removing the @Column annotations from CourseAssignmentId
  • Implementing equals() and hashCode() in CourseAssignmentId
David Levesque
  • 22,181
  • 8
  • 67
  • 82
  • Thanks for pointing that out. However, with that corrected, same issue. A bit more on the issue...The creation of a User is fine. Creation of a Course is fine. It's on save of a CourseAssignment that the hibernate issue is thrown. – Sean Sep 15 '13 at 01:57
  • Removing the `@Embeddable` and `@Column` annotations from `CourseAssignmentId` solved it. Thanks very much!! – Sean Sep 15 '13 at 18:30