Ich habe eine "Category" -Entität, die auf self verweist.Selbstreferenzierende Einheit fügt zwei Datensätze ein
@Entity
public class Category extends NamedEntity {
private String slug;
private int position;
@ManyToOne(cascade = { CascadeType.PERSIST })
private Category parent;
@OneToMany(mappedBy = "parent")
private Set<Category> children = new HashSet<Category>();
... getters/setters ...
Wenn ich an das Unternehmen zu speichern, die keine Eltern hat, fügt er "zwei" Datensätze:
| ID | NAME | POSITION | SLUG | PARENT_ID |
| 1 | 1 | 1 | 1 | 2 |
| 2 | null | 0 | null | null |
Ich wollte "eins" Datensatz, dessen PARENT_ID Null ist, aber es fügt den Datensatz (ID = 2) und den Datensatz (ID = 1) als Kind eingefügt.
speichere ich den Rekord mit Spring-Data JPA-Schnittstelle API:
public interface CategoryRepository extends Repository<Category, Long> {
public Category findById(Long id) throws DataAccessException;
public Category save(Category category) throws DataAccessException;
}
Wenn ich die Kaskadenoption lösche, tritt '' 'TransientPropertyValueException''' Ausnahme auf. Deshalb habe ich '' 'CascadeType.PERSIST''' gesetzt. Beschreibung der Ausnahmebedingung ist '' 'Objekt verweist auf eine nicht gespeicherte vorübergehende Instanz - speichern Sie die vorübergehende Instanz beforeQuery flushing'''. Vielen Dank. – nasiajai
Es sollte sich nicht beschweren, wenn Sie den Wert explizit auf "null" setzen. – Naros
Es tut mir leid, dass ich sagen muss, es ergibt sich das gleiche. – nasiajai