我知道有很多關於它的問題,但我找不到一個好的回答我的問題。JPA OneToMany雙向
我使用JBoss AS 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;
而且還Order類:
@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", "[email protected]", "2125552141", orders);
memberDao.register(member);
List<Member> members = memberDao.findAllOrderedByName();
Assert.assertNotNull(members);
Assert.assertEquals(1, members.size());
}
是,'user1516873'是對的,如果你使用'MySqL','Order'字是MySQL的保留字。 – CycDemo
+1你說得對。但我仍然有錯誤:NULL不允許列「MEMBER_ID」; SQL語句: insert into UOrder(id,member_id,name,price)values(null,?,?,?)[23502-165]' –
感謝user1516873,同樣的關鍵字在PostgreSQL上保留, – dsuess