私は実際にJPAに問題があります。彼は私のエンティティの 1 つについて不平を言っています:
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.
いくつかの調査の後、空のテーブルにデータを挿入できないため、エンティティクラスに定義された列がない場合にこの例外が表示されることがわかりました。
ただし、実際にはエンティティに2つの列が定義されています。1 つは ID 用で、もう 1 つは 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対1の関係
- 多くのキャストには多くの役割があります -> 多対多の関係