Итак, для упражнения я создаю Java веб-приложение с использованием Spring. Это простой API лотереи.
Я решил использовать JPA данных пружины в этом проекте, и я совершенно новичок ie в доступе к базе данных на основе ORM.
Я также использую flyway для управления версиями данных. Поэтому я генерирую БД, используя сценарии flyway, а затем проверяю его по моим весенним данным 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? Можно ли было создать ПФК? Я использую MariaDB в качестве базы данных.
Мой весенний код на данный момент:
@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 .. Но до сих пор с поиском в Google я не нашел точно такой же проблемы, с которой я сталкиваюсь. Поэтому я также буду признателен за любой ресурс, который вы можете порекомендовать мне на этом топи c!
С уважением
РЕДАКТИРОВАТЬ: сразу после публикации я нашел этот вопрос: 2 Foreign Keys В новую таблицу из разных сущностей Hibernate Рекомендуется использовать association table
. Есть ли более простой способ сделать это?