将2个表连接到具有额外列JPA问题的关联表

时间:2016-11-27 19:46:33

标签: java jpa

这就是我所拥有的。

enter image description here 每次用户购买票证时,UserBooking表存储用户ID,timeid和购买的票数。当我使用userid和timeid时,UserBooking正在工作,但是我正在努力弄清楚如何将额外的列添加到关联表中。当我使用2个表时,我只有两个类,User和MovieTimes,但我已经读过,如果你想添加额外的列,你应该这样做:

USERS TABLE

@Entity
@Table(name = "Users")
@SuppressWarnings("SerializableClass")
@SequenceGenerator(name = "user_seq", initialValue = 1, allocationSize = 1)
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_seq")
private int u_id;
private String name;
private String email;
private String password;
private String type

 @OneToMany(mappedBy="users")
 private List<UserBookings> timeslist;
....

MovieTimes表

@Entity
public class MovieTimes implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "times_seq")
private int tid;
private String day;
private String time;
private int tickets_qty;

@OneToMany(mappedBy = "MovieTimes")
private List<UserBookings> usersList;

@ManyToOne()
@JoinColumn(name = "mid")
private Movies m;

UserBookings表 - 关联表

@Entity
@Table(name = "UserBookings")
@SuppressWarnings("SerializableClass")
@IdClass(UserBookingsAssociationId.class)
public class UserBookings {

@Id
private int user_id;
@Id
private int time_id;
@Column(name = "tickets_purchased")
private int tickets_purchased;

@ManyToOne
@PrimaryKeyJoinColumn(name="user_id", referencedColumnName="u_id")
private Users u;

@ManyToOne
@PrimaryKeyJoinColumn(name="time_id", referencedColumnName="tid")
private MovieTimes mt;

UserBookingsAssociationId表

public class UserBookingsAssociationId implements Serializable{

private int user_id;

private int time_id;

@Override
public int hashCode() {
    return (int)(user_id + time_id);
}

@Override
public boolean equals(Object obj) {

    if(obj instanceof UserBookingsAssociationId){
        UserBookingsAssociationId otherId = (UserBookingsAssociationId) obj;
        return (otherId.user_id == this.user_id) && (otherId.time_id == this.time_id);
    }
    return false;
}

我在运行代码时遇到的问题如下:

java.lang.ExceptionInInitializerError
Caused by: Exception [EclipseLink-30005] (Eclipse Persistence Services -     2.5.2.v20140319-9ad6abd):     org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while searching for    persistence archives with ClassLoader: sun.misc.Launcher$AppClassLoader@70dea4e
Internal Exception: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd):      org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [CinemaPU] failed.
Internal Exception: Exception [EclipseLink-7154] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException

异常描述:实体类[class model.MovieTimes]中的属性[usersList]具有[MovieTimes]的mappedBy值,该值在其拥有的实体类[class model.UserBookings]中不存在。如果拥有的实体类是@MappedSuperclass,则这是无效的,并且您的属性应该引用正确的子类。

0 个答案:

没有答案