私はJava EE 6を使用しています。最初にそれを捨てたいだけです
。関係は次のとおりです。Acustomer
は複数持つことができますfacility
ここに顧客クラスがあります
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="CUSTOMER_FK", nullable=false)
private List<Facility> facilities;
public Customer(){
facilities = new ArrayList<Facility>();
}
public Customer(Long id, String name, List<Facility> facilities) {
this.id = id;
this.name = name;
this.facilities = facilities;
}
//set and get method
...
public void addFacility(Facility facility){
this.facilities.add(facility);
}
}
施設クラスはこちら
@Entity
public class Facility {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
public Facility(){}
public Facility(Long id, String name, Address address, List<Project> project) {
this.id = id;
this.name = name;
}
//Set and get method
...
}
私がこれを持っていれば、メインで今、それはうまくいきます。これが私のデータベースに挿入されるのを見ることができます
Customer customer = new Customer();
customer.setName("Wake Forest University");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("EntityLibraryPU");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(customer);
tx.commit();
ただし、機能を追加して FK 制約を強制しようとするとすぐに。物事が壊れ始めます。
Customer customer = new Customer();
customer.setName("Wake Forest University");
Facility facility = new Facility();
facility.setName("Xia");
customer.addFacility(facility);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("EntityLibraryPU");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(customer);
tx.commit();
これがエラーです。最初に、同じ "Wake Forest University" の顧客が CUSTOMER テーブルに挿入されます (name
属性が一意に設定されていないため、一度に 2 つのエントリがデータベースに挿入されます)。ただし、FACILITY テーブルには何も挿入されません。理由はありますか?エラー コードの 1 つは ですField 'customer_fk' doesn't have a default value
。多分それはあなたたちに少しヒントを与えることができます. 何も思いつきません。エラーログを調べるとCall: INSERT INTO FACILITY (ID, NAME, STREET2, STREET1, ZIPCODE, STATE, CITY, COUNTRY) VALUES (?, ?, ?, ?, ?, ?, ?, ?)bind => [2, Xia, null, null, null, null, null, null]
、私のFACILITY
テーブルにはフィールドがありCUSTOMER_FK
、との間に1対多の関係を強制しようとすると作成されますが、クエリはそのフィールドに何も挿入しませんCUSTOMER
FACILITY