Zuerst zugeordnet subobject zu speichern, lassen Sie mir die damit verbundenen zwei Klassen beschreiben:One-to-One-träge mit optional laden = false, aber wie mit null
@Entity
@Table(catalog = "db_consumer_master", name = "t_consumer")
@PrimaryKeyJoinColumn(name = "id")
public class Customer{
@OneToOne(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
public CustomerWallet getWallet() {
return wallet;
}
}
public class CustomerWallet {
@Id
@Column(name = "customer_id", unique = true, nullable = false)
@GeneratedValue(generator = "gen")
@GenericGenerator(name = "gen", strategy = "foreign", [email protected](name = "property", value = "customer"))
private long customerId;
private long amount;
@OneToOne
@PrimaryKeyJoinColumn
private Customer customer;
}
zu ermöglichen, träge laden, nur holen Einstellung = FetchType .LAZY funktioniert nicht, also füge ich "optional = false" hinzu, aber jetzt tritt ein neues Problem auf:
Ich möchte ein neues Anwalt-Objekt erstellen, indem ich session.save (Anwalt) aufruft. Hier ist der Code-Schnipsel einen Anwalt Instanz zu machen:
Customer customer= new Customer();
CustomerWallet wallet = new CustomerWallet();
customer.setWallet(wallet);
wenn save (Kunde) aufgerufen wird, wird Ausnahme geworfen:
IdentifierGenerationException: versucht id von null zuweisen einer Eins-zu-Eins-Eigenschaft
Also, meine Frage ist, wie dieses Kundenobjekt mit Wallet-Objekt zu speichern ist hier null? Brieftasche benötigt eine Kunden-ID als den gemeinsamen Primärschlüssel als Zuordnung. aber wir werden diese Kundennummer erst erhalten, wenn der Kunde in der Datenbank festgehalten hat. Muss ich eine ID in Java anstelle eines Datenbanksystems generieren? Gibt es andere Möglichkeiten für diesen Fall?
sollte nicht mappedBy 'customer' sein? und was ist Generator "Gen"? Ich denke, es sollte "fremd" sein – niceman
Sie benötigen das Attribut Anwalt in Ihrer CustomerWallet-Klasse – cralfaro
und ich denke '' PrimaryKeyJoinColumn' für Feld 'Kunde' in' CustomerWallet' ist falsch, weil es nicht der Primärschlüssel der 'CustomerWallet' Klasse – niceman