Hibernate/JPA werfen keinen Fehler beim Löschen mit fremden Schlüsselbeschränkungen aufJava

Java-Forum
Anonymous
 Hibernate/JPA werfen keinen Fehler beim Löschen mit fremden Schlüsselbeschränkungen auf

Post by Anonymous »

Ich versuche, einige Unit -Tests für eine viele bis viele Beziehung zu einer Assoziationstabelle mit ein paar zusätzlichen Spalten zu schreiben. Realistisch gesehen, wenn ich versuche, eine Zutat zu löschen und dann die DB zu spülen, sollte sie eine Ausnahme von der fremden Schlüsselbeschränkung auswerfen. Der Test wirft nicht. Wenn ich versuche, dies manuell in meinem Postgres DB zu tun, scheitert es. Meine Testfälle verwenden H2. Unsicher, wenn das der Grund sein könnte. Die bizarre Sache ist, dass ich, obwohl es nicht wirft, die Anzahl nach dem Löschen genannt wird und es auch nicht so aussieht, als ob etwas gelöscht wird? Hibernate scheint es still zu ignorieren.@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "recipe_id", "ingredient_id" }))
public class RecipeIngredient {

public static enum Unit {
KILOGRAM, GRAM, MILLIGRAM, OUNCE, POUND, MILLILITER, LITER,
TEASPOON, TABLESPOON, FLUID_OUNCE, CUP, PINT, QUART, GALLON,
PIECE, SLICE, CLOVE, STICK, CAN, UNSPECIFIED,
BOTTLE, PACK, DASH, PINCH, DROP;
}

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long recipeIngredientId;

@ToString.Exclude
@ManyToOne(optional = false)
@JoinColumn(
name = "recipe_id",
referencedColumnName = "recipeId",
nullable = false,
foreignKey = @ForeignKey(name = "recipe_id_fkey")
)
private Recipe recipe;

@ToString.Exclude
@ManyToOne(optional = false, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinColumn(
name = "ingredient_id",
referencedColumnName = "ingredientId",
nullable = false,
foreignKey = @ForeignKey(name = "ingredient_id_fkey")
)
private Ingredient ingredient;

@Enumerated(EnumType.STRING)
private Unit unit;

@NotNull
@Positive
@Column(nullable = false)
private Double quantity;
}
< /code>
@Test
public void shouldFailToDeleteIngredient(){
Recipe recipe = getRecipe();
testEntityManager.persist(recipe);
testEntityManager.flush();

assertThrows(PersistenceException.class, () -> {
ingredientRepository.deleteAll();
ingredientRepository.flush();
testEntityManager.flush(); // Forces DB constraint to be evaluated
});
}
< /code>
  • Versuchte manuell in den Postgres DB zu delet. geworfen. < /li>
    Es gibt fremde wichtige Einschränkungen in meiner Posgres-Tabelle, wenn ich den Server selbst ausführe- ich würde also annehmen, dass es für H2 das gleiche ist? Unsicher.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post