Hallo zusammen.
Was möchte ich :
Ich möchte eine Entity abspeichern. Das klappt auch - kein Problem. Nun möchte ich aber verhindern, dass das Entity doppelt gespeichert wird.dazu habe ich ein UniqueConstraint angelegt. Allerdings greift das nicht. Was ich noch ewähnen muss : Die Felder (Columns) sind in der Parent Klasse enthalten :
Kann mir jemand helfen :
[CODE lang="java" title="Meine Parent Klasse"]
@AllArgsConstructor
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class AbstractCalendarItem extends CalendarEntity implements CalendarItem {
protected LocalDateTime dateTime;
protected String description;
protected String associationName;
protected Integer seasonStartYear;
protected Integer seasonEndYear;
protected String competitionName;
protected CompetitionGender competitionGender;
protected String firstTeamName;
protected String secondTeamName;
protected Integer setPointsFirstTeam = 0;
protected Integer setPointsSecondTeam = 0;[/CODE]
[CODE lang="java" title="Die Klasse möchte ich abspeichern"]@Entity
@Table(name = "samsCalendarItem", uniqueConstraints = @UniqueConstraint(columnNames = {"dateTime", "associationName", "seasonStartYear", "seasonEndYear", "competitionName", "competitionGender", "firstTeamName", "secondTeamName"}))
@ToString(callSuper = true)
public class SamsCalendarItem extends AbstractCalendarItem implements CalendarItem {
@Builder(setterPrefix = "with", toBuilder = true)
public SamsCalendarItem(LocalDateTime dateTime, String description, String associationName, Integer seasonStartYear, Integer seasonEndYear, String competitionName, CompetitionGender competitionGender, String firstTeamName, String secondTeamName, Integer setPointsFirstTeam, Integer setPointsSecondTeam) {
super(dateTime, description, associationName, seasonStartYear, seasonEndYear, competitionName, competitionGender, firstTeamName, secondTeamName, setPointsFirstTeam, setPointsSecondTeam);
}
[/CODE]
[CODE lang="java" title="Hier der Test"] @Autowired
private SamsCalendarItemRepository unitUnderTest;
// Test Data
private SamsCalendarItem firstSamsCalendarItem = TestData.getSamsCalendarItemWithRequiredData();
private SamsCalendarItem secondSamsCalendarItem = TestData.getSamsCalendarItemWithRequiredData();
private SamsCalendarItem firstCompleteSamsCalendarItem = TestData.getSamsCalendarItemWithAllData();
private SamsCalendarItem secondCompleteSamsCalendarItem = TestData.getSamsCalendarItemWithAllData();
@Test
@DisplayName("can not save sams calendar item with same data")
void testCanNotSaveSamsCalendarItemWithSameData() {
assertThat(unitUnderTest.findAll().size()).isZero();
assertThat(firstSamsCalendarItem.getId()).isNull();
firstSamsCalendarItem = unitUnderTest.saveAndFlush(firstSamsCalendarItem);
assertThat(firstSamsCalendarItem.getId()).isNotZero();
assertThat(secondSamsCalendarItem.getId()).isNull();
assertThrows(DataIntegrityViolationException.class, () -> unitUnderTest.save(secondSamsCalendarItem));
assertThat(secondSamsCalendarItem.getId()).isNull();
}[/CODE]
Das Problem ist, dass beim Speichern von der selben Entity keine Exception kommt.
Weiß jemand Rat ?
Was möchte ich :
Ich möchte eine Entity abspeichern. Das klappt auch - kein Problem. Nun möchte ich aber verhindern, dass das Entity doppelt gespeichert wird.dazu habe ich ein UniqueConstraint angelegt. Allerdings greift das nicht. Was ich noch ewähnen muss : Die Felder (Columns) sind in der Parent Klasse enthalten :
Kann mir jemand helfen :
[CODE lang="java" title="Meine Parent Klasse"]
@AllArgsConstructor
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class AbstractCalendarItem extends CalendarEntity implements CalendarItem {
protected LocalDateTime dateTime;
protected String description;
protected String associationName;
protected Integer seasonStartYear;
protected Integer seasonEndYear;
protected String competitionName;
protected CompetitionGender competitionGender;
protected String firstTeamName;
protected String secondTeamName;
protected Integer setPointsFirstTeam = 0;
protected Integer setPointsSecondTeam = 0;[/CODE]
[CODE lang="java" title="Die Klasse möchte ich abspeichern"]@Entity
@Table(name = "samsCalendarItem", uniqueConstraints = @UniqueConstraint(columnNames = {"dateTime", "associationName", "seasonStartYear", "seasonEndYear", "competitionName", "competitionGender", "firstTeamName", "secondTeamName"}))
@ToString(callSuper = true)
public class SamsCalendarItem extends AbstractCalendarItem implements CalendarItem {
@Builder(setterPrefix = "with", toBuilder = true)
public SamsCalendarItem(LocalDateTime dateTime, String description, String associationName, Integer seasonStartYear, Integer seasonEndYear, String competitionName, CompetitionGender competitionGender, String firstTeamName, String secondTeamName, Integer setPointsFirstTeam, Integer setPointsSecondTeam) {
super(dateTime, description, associationName, seasonStartYear, seasonEndYear, competitionName, competitionGender, firstTeamName, secondTeamName, setPointsFirstTeam, setPointsSecondTeam);
}
[/CODE]
[CODE lang="java" title="Hier der Test"] @Autowired
private SamsCalendarItemRepository unitUnderTest;
// Test Data
private SamsCalendarItem firstSamsCalendarItem = TestData.getSamsCalendarItemWithRequiredData();
private SamsCalendarItem secondSamsCalendarItem = TestData.getSamsCalendarItemWithRequiredData();
private SamsCalendarItem firstCompleteSamsCalendarItem = TestData.getSamsCalendarItemWithAllData();
private SamsCalendarItem secondCompleteSamsCalendarItem = TestData.getSamsCalendarItemWithAllData();
@Test
@DisplayName("can not save sams calendar item with same data")
void testCanNotSaveSamsCalendarItemWithSameData() {
assertThat(unitUnderTest.findAll().size()).isZero();
assertThat(firstSamsCalendarItem.getId()).isNull();
firstSamsCalendarItem = unitUnderTest.saveAndFlush(firstSamsCalendarItem);
assertThat(firstSamsCalendarItem.getId()).isNotZero();
assertThat(secondSamsCalendarItem.getId()).isNull();
assertThrows(DataIntegrityViolationException.class, () -> unitUnderTest.save(secondSamsCalendarItem));
assertThat(secondSamsCalendarItem.getId()).isNull();
}[/CODE]
Das Problem ist, dass beim Speichern von der selben Entity keine Exception kommt.
Weiß jemand Rat ?