2016-03-24 1 views
0

Ich bekomme die folgende Ausnahme in meiner Java-Anwendung.Spring Daten jpa Repository speichern() funktioniert nicht für ManyToMany

org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DatabaseException 

Interne Ausnahme: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: eindeutige Einschränkung (USER1.ID_TYPE_TENANT_UNIQUE) verletzt.

Ich habe ein Datenmodell mit ManyToMany Zuordnung zwischen zwei Tabellen eingerichtet. Es gibt eine JoinTable zwischen den beiden und ich habe die Entity so eingerichtet.

public class MyEntity { 
    @Id 
    @SequenceGenerator(name = "MyEntitySeq", sequenceName = "SQ_ENTITY", allocationSize = 1, initialValue = 1) 
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "MyEntitySeq") 
    @Column(name = "ID") 
    private Integer id; 

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    @JoinTable(name = "MY_JOINED_TABLE", 
    joinColumns = { 
      @JoinColumn(name = "e_id", referencedColumnName = "ID")}, 
    inverseJoinColumns = { 
      @JoinColumn(name = "inverse_id", referencedColumnName = "ID")}) 
    private Set<Attributes> attributes; 

} 

Ich habe eine eindeutige Einschränkung auf 3 anderen Felder in der Objekt-Tabelle und eine eindeutige Einschränkung auf der Tabelle Attribute Name, Wert. Wenn ich versuche, eine Entität mit einer Menge von Attributen persistent zu machen, schlägt die repository.save() -Methode fehl, weil: 1. Ein Attribut möglicherweise bereits in der Attributtabelle vorhanden ist und aufgrund eindeutiger Integritätsbedingungen nicht eingefügt werden kann ist, was ich will. Aber ich möchte immer noch die Assoziation mit diesen Attributen zu der Entität erstellen) 2. Eine Entität kann bereits existieren, aber die eindeutige Einschränkung ist verletzt. (Ich möchte immer noch die Attribute einfügen, die noch nicht in der Datenbank sind und die Assoziation mit dieser Entität zu den Attributen erstellen).

Wenn diese Entitäten/Attribute nicht in der Datenbank sind, funktioniert es gut und Feder fügt in alle 3 Tabellen ein, mit den Joins und allem.

Wenn ich repository.save() für Tabellen ohne Assoziationen mache, aktualisiert save() diese Tabellen, auch wenn ich eine save() für denselben Primärschlüssel mache.

Warum funktioniert es nicht im Falle meiner vielenTomany?

+0

Hallo, ich habe mich gefragt, ob Sie Ihr Problem lösen konnten haben? Ich könnte ein ähnliches Problem haben. – dasnervtdoch

Antwort

0

versuchen, diese (sorry für mein Englisch, im noob in Spring MVC und Hibernate), ich hatte similars Probleme, und diese Punkte sind importants:

  1. Sie Elemente dritte Entität erhalten müssen, die Sie zuordnen möchten erste Entität in dieselbe Transaktion.
  2. sicher, dass in Ihrer Persistenz-Kontext-xml Sie
Verwandte Themen