Halllo zusammen
ich habe folgendes vor : Ich möchte in einer Team Klasse eine List von Athleten speichern.
Hier meine Team Klasse :
Hier meine Athlete Klasse :
Hier die beiden Repositories :
[CODE lang="java" title="Team Repository"]
@Repository
public interface ITeamRepository extends JpaRepository<Team, Integer> {
default Team saveObject(@NonNull Team team) {
// define filter
Predicate<Team> filterByName = t -> t.getName().equals(team.getName());
Predicate<Team> filterByClub = t -> {
if (team.getClub().isPresent()) {
return t.getClub().isPresent() && t.getClub().get().getId() == team.getClub().get().getId();
} else {
return !t.getClub().isPresent();
}
};
Predicate<Team> filterByCompetition = t -> {
if (team.getCompetition().isPresent()) {
return t.getCompetition().isPresent() && t.getCompetition().get().getId() == team.getCompetition().get().getId();
} else {
return !t.getCompetition().isPresent();
}
};
Optional<Team> searchResult = findAll()
.stream()
.filter(filterByName.and(filterByClub).and(filterByCompetition))
.findFirst();
if (searchResult.isPresent()) {
return searchResult.get();
} else {
return save(team);
}
}
}
[/CODE]
Und hier mein Athlete Repository :
Ich versuche per :
Das Team zu speichern. Bekommen aber folgende fehler :
Hat jemand eine Idee woran es liegen könnte ?
Vielen Dank !
ich habe folgendes vor : Ich möchte in einer Team Klasse eine List von Athleten speichern.
Hier meine Team Klasse :
Java:
@Entity
@Builder(setterPrefix = "with")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
@EqualsAndHashCode
public class Team implements ITeam {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Getter
private Integer id;
// required field
@NonNull
@Getter
@EqualsAndHashCode.Exclude
private String name;
@NonNull
@OneToMany(mappedBy = "order", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@Getter
private List<Athlete> athleteList;
Hier meine Athlete Klasse :
Java:
@Entity
@Builder(setterPrefix = "with")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
@EqualsAndHashCode
public class Athlete implements IAthlete {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Getter
private Integer id;
// required field
@NonNull
@Getter
@EqualsAndHashCode.Exclude
private String name;
// required field
@NonNull
@Getter
@EqualsAndHashCode.Exclude
private String preName;
// required field
@NonNull
@Getter
@EqualsAndHashCode.Exclude
private LocalDate birthday;
// required field
@NonNull
@Getter
@EqualsAndHashCode.Exclude
private Gender gender;
}
Hier die beiden Repositories :
[CODE lang="java" title="Team Repository"]
@Repository
public interface ITeamRepository extends JpaRepository<Team, Integer> {
default Team saveObject(@NonNull Team team) {
// define filter
Predicate<Team> filterByName = t -> t.getName().equals(team.getName());
Predicate<Team> filterByClub = t -> {
if (team.getClub().isPresent()) {
return t.getClub().isPresent() && t.getClub().get().getId() == team.getClub().get().getId();
} else {
return !t.getClub().isPresent();
}
};
Predicate<Team> filterByCompetition = t -> {
if (team.getCompetition().isPresent()) {
return t.getCompetition().isPresent() && t.getCompetition().get().getId() == team.getCompetition().get().getId();
} else {
return !t.getCompetition().isPresent();
}
};
Optional<Team> searchResult = findAll()
.stream()
.filter(filterByName.and(filterByClub).and(filterByCompetition))
.findFirst();
if (searchResult.isPresent()) {
return searchResult.get();
} else {
return save(team);
}
}
}
[/CODE]
Und hier mein Athlete Repository :
Java:
@Repository
public interface IAthleteRepository extends JpaRepository<Athlete, Integer> {
default Athlete saveObject(@NonNull Athlete athlete) {
// define filter
Predicate<Athlete> filterByName = a -> a.getName().equals(athlete.getName());
Predicate<Athlete> filterByPreName = a -> a.getPreName().equals(athlete.getPreName());
Predicate<Athlete> filterByGender = a -> a.getGender().equals(athlete.getGender());
Predicate<Athlete> filterByBirthday = a -> a.getBirthday().equals(athlete.getBirthday());
Optional<Athlete> searchResult = findAll()
.stream()
.filter(filterByName.and(filterByPreName).and(filterByGender).and(filterByBirthday))
.findFirst();
if (searchResult.isPresent()) {
return searchResult.get();
} else {
return save(athlete);
}
}
}
Ich versuche per :
Java:
team1 = Team.builder()
.withName(TEAM1_NAME)
.build();
log.info("build team object : {}", team1);
team1 = teamRepository.saveObject(team1);
log.info("saved team : {}", team1);
Das Team zu speichern. Bekommen aber folgende fehler :
Java:
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: model.athlete.Athlete.order in model.team.Team.athleteList
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:844) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:795) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:53) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1693) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1661) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:295) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
Hat jemand eine Idee woran es liegen könnte ?
Vielen Dank !