2

我实际上对 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 文件,所以我不能放入更多列(如果那是问题)。

编辑:

以下是本题涉及的四个表的结构:

在此处输入图像描述

  • 一部电影有一个演员 -> 一对一的关系
  • 许多演员有许多角色->关系多对多
4

1 回答 1

1

我有同样的问题。
GenerationTypeof id 字段设置为GenerationType.TABLE,它就可以解决问题。
也读这个

于 2015-12-26T22:17:19.590 回答