Hallo zusammen
ich habe folgende Klasse :
[CODE lang="java" title="Meine Klasse mit Listen"]@NoArgsConstructor(access = AccessLevel.PRIVATE)
@EqualsAndHashCode
@ToString
@Entity
@Table(name = "SamsMember")
public class SamsMember implements IMember {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@EqualsAndHashCode.Exclude
private Integer id;
@Getter
private String name;
@Getter
private String preName;
@Getter
@ManyToMany(fetch = FetchType.EAGER)
@EqualsAndHashCode.Exclude
private List<SamsTeam> teamList;
public SamsMember(String name, String preName) throws SamsParameterException {
this(name, preName, Lists.newArrayList());
}
/**
* create a new sams member object
*
* @param name - the member name
* @param preName- the member pre name
* @throws SamsParameterException - if an error occurred
*/
public SamsMember(String name, String preName, List<SamsTeam> teamList) throws SamsParameterException {
checkParameter(name, "name");
checkParameter(preName, "preName");
checkParameter(teamList, "teamList", true);
this.name = name;
this.preName = preName;
this.teamList = teamList;
}
...[/CODE]
Ich habe eine weitere Klasse um das SamsMember Objekt zu speichern :
Und mein Unit Test :
Was maht der Test ? Er erzeugt ein Team und Member objetkt. Die Erzeugung befindet sich einer Init Methode. Die beiden Objekte werden in die Datenbank geschrieben und auch geprüft,dass sie enthalten sind.
Anschließend wird dem Member Objekt das Team zugewiesen und wieder abgespeichert. Nun wir das Member Objekt aus der Datenbank wieder herausgeholt und geprüft dass das Team auch noch in der Liste enthalten ist. Aber genau das passiert nicht.
Kann mir jemand einen Hinweis geben warum das nicht richtig initialisiert wird ?
ich habe folgende Klasse :
[CODE lang="java" title="Meine Klasse mit Listen"]@NoArgsConstructor(access = AccessLevel.PRIVATE)
@EqualsAndHashCode
@ToString
@Entity
@Table(name = "SamsMember")
public class SamsMember implements IMember {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@EqualsAndHashCode.Exclude
private Integer id;
@Getter
private String name;
@Getter
private String preName;
@Getter
@ManyToMany(fetch = FetchType.EAGER)
@EqualsAndHashCode.Exclude
private List<SamsTeam> teamList;
public SamsMember(String name, String preName) throws SamsParameterException {
this(name, preName, Lists.newArrayList());
}
/**
* create a new sams member object
*
* @param name - the member name
* @param preName- the member pre name
* @throws SamsParameterException - if an error occurred
*/
public SamsMember(String name, String preName, List<SamsTeam> teamList) throws SamsParameterException {
checkParameter(name, "name");
checkParameter(preName, "preName");
checkParameter(teamList, "teamList", true);
this.name = name;
this.preName = preName;
this.teamList = teamList;
}
...[/CODE]
Ich habe eine weitere Klasse um das SamsMember Objekt zu speichern :
Java:
@Repository
public interface SamsMemberRepository extends JpaRepository<SamsMember, Integer> {
default SamsMember saveObject(SamsMember member) {
Optional<SamsMember> dbObjet = findAll().stream().filter(o -> o.equals(member)).findFirst();
if (!dbObjet.isPresent()) {
save(member);
return member;
} else {
return dbObjet.get();
}
}
}
Und mein Unit Test :
Java:
@Test
@DisplayName("save sams member with team list")
public void saveSamsMemberWithTeamList() throws SamsParameterException {
member.addTeam(team1);
assertEquals(1, member.getTeamList().size());
log.info("save samsMember : '{}'", member);
member = memberRepository.saveObject(member);
assertEquals(1, memberRepository.count());
List<SamsMember> memberList = memberRepository.findAll();
assertEquals(1, memberList.size());
SamsMember dbMember = memberList.get(0);
assertNotNull(dbMember);
List<SamsTeam> teamList = dbMember.getTeamList();
assertNotNull(teamList);
assertEquals(1, teamList.size()); // FEHLER
SamsTeam team = teamList.get(0);
assertNotNull(team);
assertEquals(team, team1);
}
Was maht der Test ? Er erzeugt ein Team und Member objetkt. Die Erzeugung befindet sich einer Init Methode. Die beiden Objekte werden in die Datenbank geschrieben und auch geprüft,dass sie enthalten sind.
Anschließend wird dem Member Objekt das Team zugewiesen und wieder abgespeichert. Nun wir das Member Objekt aus der Datenbank wieder herausgeholt und geprüft dass das Team auch noch in der Liste enthalten ist. Aber genau das passiert nicht.
Kann mir jemand einen Hinweis geben warum das nicht richtig initialisiert wird ?