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;
    }   
}
4

1 回答 1

1

一些事情要尝试:

  • 从中删除@Embeddable注释CourseAssignmentId(我认为在这种情况下不合适)
  • 删除@Column注释CourseAssignmentId
  • 实施equals()hashCode()CourseAssignmentId
于 2013-09-15T00:34:12.697 回答