Я пытаюсь изучить Hibernate и, начиная со следующей проблемы, я моделирую приложение со спортивным результатом. У меня есть следующие таблицы оракулов.
У меня есть таблица LEAGUES с первичным ключом LEAGUE_ID и таблица TEAMS с первичным ключом TEAM_ID и внешним ключом LEAGUE_ID. В одной лиге будет много команд.
Таблица LEAGUES описывается как ....
Name Null Type
--------------- -------- ------------
LEAGUE_ID NOT NULL NUMBER(38)
LEAGUE_NAME NOT NULL VARCHAR2(30)
NUMBER_OF_TEAMS NUMBER(38)
GOALS VARCHAR2(1)
CORNERS VARCHAR2(1)
START_DATE DATE
И КОМАНДЫ как ....
Name Null Type
--------------- -------- ------------
TEAM_ID NOT NULL NUMBER(38)
LEAGUE_ID NOT NULL NUMBER(38)
TEAM_NAME NOT NULL VARCHAR2(40)
PREVIOUS_LEAGUE_ID NOT NULL NUMBER(38)
STADIUM_NAME VARCHAR2(40)
CURRENT_GRADE VARCHAR2(1)
CITY VARCHAR2(30)
Я пытаюсь следовать этому уроку:
https://www.baeldung.com/hibernate-one-to-many
Мои классы сущностей выглядят следующим образом, @Data - это аннотация lombok, поэтому автоматически генерируются методы получения / установки, конструкторы ...
@Data
@Entity
@Table(name="Leagues")
public class League {
@Id
@Column(name="league_id", updatable=false, nullable=false)
private int leagueId;
@Column(name="league_name")
private String leagueName;
@Column(name="number_of_teams")
private int numberOfTeams;
private String goals;
private String corners;
@Column(name="start_date")
private Date startDate;
@OneToOne(mappedBy = "league")
private Set<Team> teams;
}
@Data
@Entity
@Table(name="Teams")
public class Team {
@Id
@Column(name="team_id", updatable=false, nullable=false)
private int teamId;
@ManyToOne
@JoinColumn(name="league_id")
private League league;
@Column(name="team_name")
private String teamName;
@Column(name="previous_league_id")
private int previousLeagueId;
@Column(name="stadium_name")
private String stadiumName;
@Column(name="current_grade")
private String currentGrade;
@Column(name="city")
private String city;
}
Я просто сейчас пытаюсь получить данные, используя это ...
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
@Transactional(readOnly = true)
@Override
public void run(String... args) throws Exception {
System.out.println("DATASOURCE = " + dataSource);
System.out.println("\n1.findAll()...");
for (Team team : teamRepository.findAll()) {
System.out.println(team);
}
for (League league : leagueRepository.findAll()) {
System.out.println(league);
}
...
}
Но я получаю следующее исключение;
2019-06-06 16:02:22 ERROR o.s.boot.SpringApplication - Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Unknown mappedBy in: hello.model.League.teams, referenced property unknown: java.util.Set.league
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151)
at hello.Application.main(Application.java:47)
Caused by: org.hibernate.AnnotationException: Unknown mappedBy in: hello.model.League.teams, referenced property unknown: java.util.Set.league
at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:147)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1655)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1623)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:373)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:362)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 15 common frames omitted
Process finished with exit code 1
Я уже работал до того, как попытался представить отображение, поэтому основной класс и lombok должны быть в порядке. Любая помощь будет принята с благодарностью.