EJB3.0 / JPA实体之间的关系很多

时间:2012-12-01 16:43:23

标签: java database java-ee jpa ejb-3.0

我正在使用Java EE JSP / EJB3,我在实现表之间的关系时遇到了问题。

作为解释我问题的一个测试例子,我想出了一个汽车模型和一个品牌关系。在此Web应用程序中,用户首先创建品牌。然后创造汽车,因为如果没有一个或多个品牌,汽车就不可能存在。一个品牌可以有很多车,一辆车可以归属于许多品牌。此外,我希望Brand I可以像以下brand.cars一样访问汽车,并从Cars访问car.brands等品牌。所有这些都是由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;
}

以下是汽车实体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

我做错了什么?

0 个答案:

没有答案