gpt4 book ai didi

java - JPA OneToMany 双向

转载 作者:行者123 更新时间:2023-12-02 07:38:05 24 4
gpt4 key购买 nike

我知道有很多关于它的问题,但我找不到针对我的问题的好的答案。

我使用 Jboss 作为 7,Spring 和 Hibernate (4) 作为 JPA 2.0 提供程序,因此我有简单的 @OneToMany 双向关系:

我有这样的 super 人物:

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

和类(class)成员:

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

}

最佳答案

将表名称从“order”更改为不同的名称,例如 PersonOrder

关于java - JPA OneToMany 双向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12515039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com