hibernate
Hibernate Entity Relationships usando le annotazioni
Ricerca…
Parametri
Annotazione | Dettagli |
---|---|
@OneToOne | Specifica una relazione uno a uno con un oggetto corrispondente. |
@OneToMany | Specifica un singolo oggetto che si associa a molti oggetti. |
@ManyToOne | Specifica una raccolta di oggetti che si associano a un singolo oggetto. |
@Entity | Specifica un oggetto che si associa a una tabella di database. |
@Table | Specifica quale tabella di database viene mappata anche da questo oggetto. |
@JoinColumn | Specifica in quale colonna è memorizzata una chiave di foregin. |
@JoinTable | Specifica una tabella intermedia che memorizza le chiavi esterne. |
Multi-direzionale Molti a molti utilizzando l'oggetto tabella di join gestito dall'utente
@Entity
@Table(name="FOO")
public class Foo {
private UUID fooId;
@OneToMany(mappedBy = "bar")
private List<FooBar> bars;
}
@Entity
@Table(name="BAR")
public class Bar {
private UUID barId;
@OneToMany(mappedBy = "foo")
private List<FooBar> foos;
}
@Entity
@Table(name="FOO_BAR")
public class FooBar {
private UUID fooBarId;
@ManyToOne
@JoinColumn(name = "fooId")
private Foo foo;
@ManyToOne
@JoinColumn(name = "barId")
private Bar bar;
//You can store other objects/fields on this table here.
}
Specifica una relazione a due vie tra molti oggetti Foo
su molti oggetti Bar
usando una tabella di join intermedia che l'utente gestisce.
Gli oggetti Foo
sono memorizzati come righe in una tabella chiamata FOO
. Gli oggetti Bar
vengono memorizzati come righe in una tabella chiamata BAR
. Le relazioni tra gli oggetti Foo
e Bar
sono memorizzate in una tabella chiamata FOO_BAR
. C'è un oggetto FooBar
come parte dell'applicazione.
Comunemente utilizzato quando si desidera memorizzare informazioni aggiuntive sull'oggetto join, ad esempio la data di creazione della relazione.
Multi-direzionale Molti a molti utilizzando la tabella di join gestita da Hibernate
@Entity
@Table(name="FOO")
public class Foo {
private UUID fooId;
@OneToMany
@JoinTable(name="FOO_BAR",
joinColumns = @JoinColumn(name="fooId"),
inverseJoinColumns = @JoinColumn(name="barId"))
private List<Bar> bars;
}
@Entity
@Table(name="BAR")
public class Bar {
private UUID barId;
@OneToMany
@JoinTable(name="FOO_BAR",
joinColumns = @JoinColumn(name="barId"),
inverseJoinColumns = @JoinColumn(name="fooId"))
private List<Foo> foos;
}
Specifica una relazione tra molti oggetti Foo
su molti oggetti Bar
utilizzando una tabella di join intermedia gestita da Hibernate.
Gli oggetti Foo
sono memorizzati come righe in una tabella chiamata FOO
. Gli oggetti Bar
vengono memorizzati come righe in una tabella chiamata BAR
. Le relazioni tra gli oggetti Foo
e Bar
sono memorizzate in una tabella chiamata FOO_BAR
. Tuttavia ciò implica che non vi è alcun oggetto FooBar
come parte dell'applicazione.
Relazione bi-direzionale da uno a molti utilizzando la mappatura delle chiavi esterne
@Entity
@Table(name="FOO")
public class Foo {
private UUID fooId;
@OneToMany(mappedBy = "bar")
private List<Bar> bars;
}
@Entity
@Table(name="BAR")
public class Bar {
private UUID barId;
@ManyToOne
@JoinColumn(name = "fooId")
private Foo foo;
}
Specifica una relazione bidirezionale tra un oggetto Foo
e molti oggetti Bar
utilizzando una chiave esterna.
Gli oggetti Foo
sono memorizzati come righe in una tabella chiamata FOO
. Gli oggetti Bar
vengono memorizzati come righe in una tabella chiamata BAR
. La chiave esterna è memorizzata nella tabella BAR
in una colonna chiamata fooId
.
Relazione bi-direzionale uno-a-uno gestita da Foo.class
@Entity
@Table(name="FOO")
public class Foo {
private UUID fooId;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "barId")
private Bar bar;
}
@Entity
@Table(name="BAR")
public class Bar {
private UUID barId;
@OneToOne(mappedBy = "bar")
private Foo foo;
}
Specifica una relazione bidirezionale tra un oggetto Foo
e un oggetto Bar
utilizzando una chiave esterna.
Gli oggetti Foo
sono memorizzati come righe in una tabella chiamata FOO
. Gli oggetti Bar
vengono memorizzati come righe in una tabella chiamata BAR
. La chiave esterna è memorizzata nella tabella FOO
in una colonna denominata barId
.
Si noti che il valore mappedBy
è il nome del campo sull'oggetto, non il nome della colonna.
Relazione unidirezionale unidirezionale con la tabella di join gestita dall'utente
@Entity
@Table(name="FOO")
public class Foo {
private UUID fooId;
@OneToMany
@JoinTable(name="FOO_BAR",
joinColumns = @JoinColumn(name="fooId"),
inverseJoinColumns = @JoinColumn(name="barId", unique=true))
private List<Bar> bars;
}
@Entity
@Table(name="BAR")
public class Bar {
private UUID barId;
//No Mapping specified here.
}
@Entity
@Table(name="FOO_BAR")
public class FooBar {
private UUID fooBarId;
@ManyToOne
@JoinColumn(name = "fooId")
private Foo foo;
@ManyToOne
@JoinColumn(name = "barId", unique = true)
private Bar bar;
//You can store other objects/fields on this table here.
}
Specifica una relazione unidirezionale tra un oggetto Foo
e molti oggetti Bar
utilizzando una tabella di join intermedia che l'utente gestisce.
Questo è simile a una relazione ManyToMany
, ma se si aggiunge un vincolo unique
alla chiave esterna di destinazione è possibile far rispettare che è OneToMany
.
Gli oggetti Foo
sono memorizzati come righe in una tabella chiamata FOO
. Gli oggetti Bar
vengono memorizzati come righe in una tabella chiamata BAR
. Le relazioni tra gli oggetti Foo
e Bar
sono memorizzate in una tabella chiamata FOO_BAR
. C'è un oggetto FooBar
come parte dell'applicazione.
Si noti che non vi è alcuna mappatura degli oggetti Bar
indietro agli oggetti Foo
. Bar
oggetti della Bar
possono essere manipolati liberamente senza influenzare gli oggetti Foo
.
Molto comunemente usato con Spring Security quando si imposta un oggetto User
che ha un elenco di Role
che possono eseguire. È possibile aggiungere e rimuovere i ruoli ad un utente, senza doversi preoccupare di cascate eliminazione Role
s'.
Relazione One-One unidirezionale
@Entity
@Table(name="FOO")
public class Foo {
private UUID fooId;
@OneToOne
private Bar bar;
}
@Entity
@Table(name="BAR")
public class Bar {
private UUID barId;
//No corresponding mapping to Foo.class
}
Specifica una relazione unidirezionale tra un oggetto Foo
e un oggetto Bar
.
Gli oggetti Foo
sono memorizzati come righe in una tabella chiamata FOO
. Gli oggetti Bar
vengono memorizzati come righe in una tabella chiamata BAR
.
Si noti che non vi è alcuna mappatura degli oggetti Bar
indietro agli oggetti Foo
. Bar
oggetti della Bar
possono essere manipolati liberamente senza influenzare gli oggetti Foo
.