Java EE JSP/EJB3 を使用していますが、テーブル間のリレーションの実装に問題があります。
私の問題を説明するためのテスト例として、車のモデルとブランドの関係を考え出しました。この Web アプリケーションでは、ユーザーは最初にブランドを作成します。車は 1 つまたは複数のブランドなしでは存在できないため、次に車を作成します。ブランドは多くの車を持つことができ、車は多くのブランドに分類できます。さらに、Brand から次の brand.cars のような車にアクセスでき、Cars から car.brands のようなブランドにアクセスできることを願っています。Car は最後に作成されるため、これらはすべて Car によって駆動されます。
上記の推論がこれを実装する最良の方法であるかどうかはわかりません。アイデアは、はるかに少ない問題で両方の方法にアクセスできるようにすることです.
public class Brand implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private long id;
@Column(name="brand_name")
private String brand_name;
@ManyToMany(mappedBy="cars")
private List<Car> cars;
}
以下は、car エンティティ Bean です。
public class Car implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private long id;
@JoinTable(name = "CarBrand",
joinColumns =
@JoinColumn(name = "CAR_ID", referencedColumnName = "id"),
inverseJoinColumns =
@JoinColumn(name = "BRAND_ID", referencedColumnName = "id"))
private List<Brand> brands;
}
なんとかブランドを作成できましたが、特定のブランドで車を作成しようとすると、次のようになります
WARNING: Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL121201171525140' defined on 'BRAND'.
Error Code: -1
Call: INSERT INTO Brand
私は何を間違っていますか?