我实际上对 JPA 有疑问。他在抱怨我的一个实体:
javax.persistence.RollbackException: Exception [EclipseLink-6023] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.QueryException
Exception Description: The list of fields to insert into the table [DatabaseTable(TBL_SPJ_CAST_MOVIE)] is empty. You must define at least one mapping for this table.
经过一番研究,我发现当实体类中没有定义列时会出现此异常,因为您当然不能将数据插入空表中。
但是我实际上在我的实体中定义了两列。一个用于 id,一个用于 am:n 表的外键:
import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name="TBL_SPJ_CAST_MOVIE")
public class CastMovie implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="CAST_MOVIE_ID", unique=true)
private int castID = 0;
@ManyToMany(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
@JoinTable(name="TBL_SPJ_CAST_ROLE", joinColumns={@JoinColumn(name="CAST_MOVIE_ID")}, inverseJoinColumns={@JoinColumn(name="ROLE_ID")})
private List<Role> roles = null;
public CastMovie() {}
public int getCastID() {
return castID;
}
public void setCastID(int castID) {
this.castID = castID;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
}
那么这个错误有什么意义呢?所有数据都来自 xml 文件,所以我不能放入更多列(如果那是问题)。
编辑:
以下是本题涉及的四个表的结构:
- 一部电影有一个演员 -> 一对一的关系
- 许多演员有许多角色->关系多对多