gpt4 book ai didi

java - 数据库不显示两个特定实体的关系 - Spring Boot 应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:09 25 4
gpt4 key购买 nike

花了一天的时间来解决这个问题,但没有发现问题。我不需要完美的解决方案,只要给我指示就是问题所在。我在哪里可以找到有关此事的信息。

我创建了一些实体,其中一些您可以在下面找到(不是所有字段,只是此任务所需的):

@Entity
@Data
@EqualsAndHashCode(exclude = {"teams","organizers"})
public class Event {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(nullable = false)
private String eventName;

@ManyToMany
@JoinTable(name = "event_organizer",
joinColumns = @JoinColumn(name = "event_id"),
inverseJoinColumns = @JoinColumn(name = "organizer_id"))
private Set<Organizer> organizers= new HashSet<>();

@ManyToMany
@JoinTable(name = "event_team",
joinColumns = @JoinColumn(name = "event_id"),
inverseJoinColumns = @JoinColumn(name = "team_id"))
private Set<Team> teams = new HashSet<>();
}


@Entity
@Data
@EqualsAndHashCode(exclude = {"events"})
public class Organizer {


@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(nullable = false)
private String organizerName;
private String organizerLastName;
private String organizerEmailAddress;
private String organizerTelephoneNumber;

@ManyToMany(mappedBy = "organizers")
private Set<Event> events= new HashSet<>();
}

@Entity
@Data
@EqualsAndHashCode(exclude = {"events", "players"})
public class Team {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(nullable = false)
private String teamName;

@ManyToMany
@JoinTable(name = "team_player",
joinColumns = @JoinColumn(name = "team_id"),
inverseJoinColumns = @JoinColumn(name = "player_id"))
private Set<Player> players = new HashSet<>();

@ManyToMany(mappedBy = "teams")
private Set<Event> events= new HashSet<>();

}

@Entity
@Data
@EqualsAndHashCode(exclude = {"teams"})
public class Player {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(nullable = false)
private String playerName;
private String playerLastName;
private int playerAge;

private String playerNickname;
private String playerEmailAddress;
private String playerTelephoneNumber;

@ManyToMany(mappedBy = "players")
private Set<Team> teams = new HashSet<>();

@Enumerated(value = EnumType.STRING)
private FavouritePosition favouritePosition;
}

我创建了一个引导类,它可以从 data.sql 文件中获取一些数据:

@Component
public class EventBootstrap implements ApplicationListener<ContextRefreshedEvent>{

//There are some Repositories fields and constructor


@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
eventRepository.saveAll(getEvent());
}

private List<Event> getEvent() {
List<Event> events = new ArrayList<>();


//Organizers
Optional<Organizer> ostrouchKolobrzeskaOrganizerOptional = organizerRepository.findByOrOrganizerLastName("Ostrouch");
if (!ostrouchKolobrzeskaOrganizerOptional.isPresent()){
throw new RuntimeException("Organizer not found !");
}

Organizer ostrouchKolobrzeskaOrganizer = ostrouchKolobrzeskaOrganizerOptional.get();

Optional<Organizer> kaimWestFootballPitchOrganizerOptional = organizerRepository.findByOrOrganizerLastName("Kaim");
if (!kaimWestFootballPitchOrganizerOptional.isPresent()){
throw new RuntimeException("Organizer not found!");
}

Organizer kaimWestFootballPitchOrganizer = kaimWestFootballPitchOrganizerOptional.get();

//Set 1 organizers
Set<Organizer> organizersSetOne = new HashSet<>();
organizersSetOne.add(kaimWestFootballPitchOrganizer);
organizersSetOne.add(ostrouchKolobrzeskaOrganizer);


//Set 2 organizers
Set<Organizer> organizerSetTwo = new HashSet<>();
organizerSetTwo.add(ostrouchKolobrzeskaOrganizer);

//Team
Optional<Team> jeppesenFootballTeamOptional = teamRepository.findByTeamName("Jeppesen Football Team");
if (!jeppesenFootballTeamOptional.isPresent()){
throw new RuntimeException("Expected football team not found");
}

Team jeppesenFootballTeam = jeppesenFootballTeamOptional.get();

Optional<Team> lufthansaFootballTeamOptional = teamRepository.findByTeamName("Lufthansa Football Team");
if (!lufthansaFootballTeamOptional.isPresent()){
throw new RuntimeException("Expected football team not found");
}

Team lufthansaFootballTeam = lufthansaFootballTeamOptional.get();

//Set 1 team
Set<Team> teamsSetOne = new HashSet<>();
teamsSetOne.add(jeppesenFootballTeam);
teamsSetOne.add(lufthansaFootballTeam);

//Set 2 team
Set<Team> teamsSetTwo = new HashSet<>();
teamsSetTwo.add(lufthansaFootballTeam);

//getPlayer
Optional<Player> przemekPlayerOptional = playerRepository.findByPlayerName("Przemyslaw");
if(!przemekPlayerOptional.isPresent()){
throw new RuntimeException("Expected player not found!");
}

Optional<Player> jakubPlayerOptional = playerRepository.findByPlayerName("Jakub");
if(!jakubPlayerOptional.isPresent()){
throw new RuntimeException("Expected player not found!");
}

Player przemekPlayer = przemekPlayerOptional.get();
przemekPlayer.setFavouritePosition(FavouritePosition.MIDFIELDER);

Player jakubPlayer = jakubPlayerOptional.get();
jakubPlayer.setFavouritePosition(FavouritePosition.ATTACKER);


Set<Player> playersSetOne = new HashSet<>();
playersSetOne.add(przemekPlayer);
playersSetOne.add(jakubPlayer);

Set<Player> playersSetTwo= new HashSet<>();
playersSetTwo.add(przemekPlayer);

//setPlayer for the team
jeppesenFootballTeam.setPlayers(playersSetOne);
lufthansaFootballTeam.setPlayers(playersSetTwo);

Event kolobrzeskaEvent = new Event();
kolobrzeskaEvent.setOrganizers(organizersSetOne);
kolobrzeskaEvent.setEventName("Kołobrzeska Event");
kolobrzeskaEvent.setTeams(teamsSetOne);

Event westEvent = new Event();
westEvent.setOrganizers(organizerSetTwo);
westEvent.setEventName("West Event");
westEvent.setTeams(teamsSetTwo);

events.add(kolobrzeskaEvent);
events.add(westEvent);

return events;
}
}

这是带有 thymeleaf 和 hibernate 的 Spring boot 项目。当我运行应用程序并查看 H2 数据库控制台时,我得到了正确的表:EVENT_ORGANIZER、ORGANIZER、EVENT、PLAYER、TEAM,但 TEAM_PLAYER 为空,我没有看到任何关系。我尝试使用调试器,但没有效果。哪里有问题?我研究了所有实体类,关系看起来不错,与引导类相同。

如果您需要任何其他信息,请发表评论。非常感谢您的支持

编辑:我又调试了一次,我注意到在一些变量旁边我遇到了异常:

Method threw 'org.hibernate.LazyInitializationException' exception. Cannot evaluate java.util.Optional.toString()

之后我设置了 fetch = FetchType.EAGER。但异常情况仍然发生在杰普森足球队可选附近。会不会是数据库关系的问题?

最佳答案

请检查您的 data.sql 文件。表已创建,但数据未插入。检查 ”;;”在行尾。

关于java - 数据库不显示两个特定实体的关系 - Spring Boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168259/

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