2

私はそれについて多くの質問があることを知っていますが、私は私の問題に対する良い答えを見つけることができません。

私はJbossを7として、SpringとHibernate(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;

また、クラスの順序:

@Entity
public class Order {

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

private float price; 

@ManyToOne(optional=false)
private Member member;

private String name;

だから私はそれが良い構成だと思います、しかし私はメモリ内の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です:

  @Test
public void testInsertWithOrder(){
    Order order = new Order(20.0f, "first stuff");
    Order order2 = new Order(40.0f, "secondary stuff");
    List<Order> orders = new ArrayList<Order>();
    orders.add(order2);
    orders.add(order);

    Member member = new Member("Member name", "member23@gmail.com", "2125552141", orders);

    memberDao.register(member);

    List<Member> members = memberDao.findAllOrderedByName();

    Assert.assertNotNull(members);
    Assert.assertEquals(1, members.size());     

}
4

3 に答える 3

10

テーブル名を「order」から PersonOrder などの別の名前に変更します

于 2012-09-20T14:58:54.233 に答える
1

@CycDemo

私はそれを理解しているだけで、私のコンストラクターで私は今持っています:

    @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;

   }

Ant これは私が必要なものです :)))

于 2012-09-20T17:06:03.693 に答える
1

クラスmember内に、注釈がありません。以下のようにしてみてください。Order@JoinColumn

@ManyToOne(optional=false)
@JoinColumn(name = "memberId", referencedColumnName = "id")
private Member member;
于 2012-09-20T15:00:18.090 に答える