2012-09-20 4 views
2

나는 그것에 대해 많은 질문이 있지만 나는 내 문제에 대해 좋은 답변을 찾을 수 없다는 것을 안다. 내가 7로 제이 보스를 사용하고JPA OneToMany 양방향

, 봄 및 최대 절전 모드 (4) JPA 2.0 공급자로 그래서 내가 가지고 간단한 @OneToMany 양방향 관계 :

나는 그런 슈퍼 클래스 사람을 가지고있다 :

@MappedSuperclass 
@Inheritance(strategy=InheritanceType.JOINED) 
public abstract class Person { 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private Long id; 

@NotNull 
@Size(min = 1, max = 25) 
@Pattern(regexp = "[A-Za-z ]*", message = "must contain only letters and spaces") 
private String name; 


public Person(String name) { 
    super(); 
    this.name = name; 
} 

그리고 클래스 회원 :

@Entity 
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "email")) 
public class Member extends Person implements Serializable 
{ 
    /** Default value included to remove warning. Remove or modify at will. **/ 
    private static final long serialVersionUID = 1L; 


    @NotNull 
    @NotEmpty 
    @Email 
    private String email; 

    @NotNull 
    @Size(min = 10, max = 12) 
    @Digits(fraction = 0, integer = 12) 
    @Column(name = "phone_number") 
    private String phoneNumber; 

    @OneToMany(cascade=CascadeType.ALL , mappedBy="member" , fetch=FetchType.EAGER) 
    private List<Order> orders; 

또한 클래스 주문 :

,342,

그래서 나는 그것이 좋은 구성이라고 생각,하지만 난 메모리 HSQL에서이 응용 프로그램을 테스트하고 난 오류 가지고 :

Hibernate: alter table Order drop constraint FK48E972E548C740B 
2012-09-20 16:25:37 org.hibernate.tool.hbm2ddl.SchemaExport perform 
ERROR: HHH000389: Unsuccessful: alter table Order drop constraint FK48E972E548C740B 
2012-09-20 16:25:37 org.hibernate.tool.hbm2ddl.SchemaExport perform 
ERROR: Blad skladniowy w wyrazeniu SQL "ALTER TABLE ORDER[*] DROP CONSTRAINT FK48E972E548C740B "; oczekiwano "identifier" 
Syntax error in SQL statement "ALTER TABLE ORDER[*] DROP CONSTRAINT FK48E972E548C740B "; expected "identifier"; SQL statement: 
alter table Order drop constraint FK48E972E548C740B [42001-165] 

또한 :

Syntax error in SQL statement "CREATE TABLE ORDER[*] (ID INTEGER GENERATED BY DEFAULT AS IDENTITY, NAME VARCHAR(255), PRICE FLOAT NOT NULL, MEMBER_ID BIGINT NOT NULL, PRIMARY KEY (ID)) "; expected "identifier"; SQL statement: 

그리고 내 JUnit 테스트를

: 실패 난

이 내 단지의 JUnit입니다 ...이 구성에 어떤 문제가 있는지 잘 모릅니다 '순서'에서 memberOrder 클래스에서

답변

10

변경 테이블 이름은, @JoinColumn 주석이 누락되었습니다. 다음과 같이 시도하십시오.

@ManyToOne(optional=false) 
@JoinColumn(name = "memberId", referencedColumnName = "id") 
private Member member; 
+1

예 ,'user1516873'이 맞습니다.'MySqL'을 사용하면'Order' word는 MySQL의 예약어입니다. – CycDemo

+0

+1 당신은 옳았습니다. 하지만 난 여전히 오류가 :'열에 허용되지 않는 NULL "MEMBER_ID"; SQL 문 : UOrder (id, member_id, name, price) 값 (null,?,?,?)에 삽입 [23502-165]' –

+1

고맙습니다. user1516873, PostgreSQL에서도 동일한 키워드가 예약되었으므로, H2에 적용되는 – dsuess

1

PersonOrder

같은 다른 무언가에
+0

나는 시도한다 그러나 나는 또한 오류가 있고 내 junit는 실패한다 : –

+2

H2 예약 된 Keywork에서는,'순서'그들 중 하나이다; http://www.scribd.com/doc/88837291/224/Keywords-Reserved-Words 'CROSS, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DISTINCT, EXCEPT, EXISTS, FALSE, FROM, FULL, GROUP, HAVING, INNER 참조. , INTERSECT, IS, JOIN, LIKE, LIMIT, MINUS, NATURAL, NOT NULL, ON, ORDER, PRIMARY, ROWNUM, SELECT, SYSTIME, SYSTIME, SYSTIMESTAMP, 오늘, TRUE, UNION, UNIQUE 등이 있습니다. – CycDemo

+0

예 어리석은 :) 그것은 아주 쉽습니다 ... 나는 UOrder –

1

@CycDemo

나는 단지 그것을 알아 내 constructor에에 내가 지금 가지고 :

@OneToMany(cascade=CascadeType.ALL , mappedBy="member" , fetch=FetchType.EAGER) 
    private List<UOrder> orders = new ArrayList<UOrder>(); 



     public Member(String name, String email, String phoneNumber ,List<UOrder> orders) { 
     super(name); 
     this.orders = orders; 
     this.email = email; 
     for(UOrder o : orders){ 
      o.setMember(this);   
     } 
     this.orders = orders; 

    } 

개미이 내가해야 할 무엇이다 :)))