【发布时间】:2020-01-24 20:17:01
【问题描述】:
因此,作为一个练习,我使用 Spring 构建了一个 Java Web 应用程序。这是一个简单的彩票 API。
我决定在这个项目中使用 Spring Data JPA,我是基于 ORM 的数据库访问的新手。
我也在使用 flyway 进行数据版本控制。因此,我使用 flyway 脚本生成 db,然后根据我的 spring data jpa 模型对其进行验证。
这是相当复杂的......但最终我认为它提供的不仅仅是复杂的东西。
所以我有 3 张桌子
RAFFLE
raffleID - primmary key
startDate
endDate
winningNumbers
TICKETS
ticketID - primmary key
raffleID - foreign key
customerName
numbers
WINNERS
ticketID - foreignKey
raffleID - foreignKey
Amount
Type
这是糟糕的设计吗?我还应该为 WINNERS 表使用主键吗?是否可以创建 PFK ? 我使用 MariaDB 作为数据库。
到目前为止我的spring代码:
@Entity
@Data
@Table(name = "Raffle")
public class Raffle{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long raffleID;
private Timestamp startDate;
private Timestamp endDate;
private String winningNumbers;
@OneToMany(mappedBy = "Tickets")
private Set<Tickets> tickets;
public Raffle(Timestamp startDate, Timestamp endDate, String winningNumbers, Tickets... ticket){
this.startDate = startDate;
this.endDate = endDate;
this.winningNumbers = winningNumbers;
}
}
@Entity
@Data
@Table(name = "Tickets")
public class Tickets {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long TicketID;
@ManyToOne
@JoinColumn(name="RAFFLE_ID")
private Raffle RaffleID;
private String customerName;
private String numbers;
}
@Entity
@Data
@Table(name = "Winners")
public class Winners {
@Id
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "raffleID", referencedColumnName = "raffleID")
private Raffle raffle;
@Id
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "ticketID", referencedColumnName = "ticketID")
private Tickets ticket;
private Double prizeWon;
private String prizeType;
private String status;
}
目前我收到此错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.grmkris.lightningloterry.model.database.Tickets.Tickets in com.grmkris.lightningloterry.model.database.Raffle.tickets
我知道我应该对自己进行更多关于 JPA 机制的教育……但到目前为止,通过谷歌搜索我还没有发现我面临的完全相同的问题。因此,我也将感谢您在此主题上向我推荐的任何资源!
问候
编辑:
刚刚发布这个之后,我发现了这个问题:
2 Foreign Keys Into a New Table from Different Entities Hibernate
建议使用association table。有没有更简单的方法来做到这一点?
【问题讨论】:
-
您在
@OneToMany(mappedBy = "Tickets")中有一个错误,我认为您的意思是@OneToMany(mappedBy = "RaffleID")另请参阅baeldung.com/hibernate-one-to-many。 -
我回答了我自己的问题。你能检查我的答案并发表评论吗?
标签: java spring hibernate spring-boot jpa