@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Warum verwenden wir diese Anmerkungen? Ich muss wissen, ob dies meine Tabellen-ID-Werte automatisch erhöht. (GenerationType.IDENTITY) gibt es andere Typen, die tatsächlich passieren, wenn wir diese Annotation verwenden
public class Author extends Domain
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "name")
private String name;
@Column(name = "address")
private String address;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "authorId")
private List<Book>
bookList;
public Author()
{
setServiceClassName("wawo.tutorial.service.admin.AuthorService");
}
}
* Ist es notwendig, die abstrakte Domain-Klasse zu erweitern? Was nützt das?
Antworten:
Lassen Sie mich diese Frage beantworten:
Zunächst einmal ist die Verwendung von Anmerkungen als Konfigurationsmethode nur eine bequeme Methode, anstatt die endlose XML-Konfigurationsdatei zu kopieren.
Die
@Id
Anmerkung wird vonjavax.persistence.Id
,geerbt, wobei angegeben wird , dass das unten stehende Elementfeld der Primärschlüssel der aktuellen Entität ist. Daher können Sie im Ruhezustand und im Frühjahr einigereflect
Arbeiten ausführen, die auf dieser Anmerkung basieren. Für Details überprüfen Sie bitte javadoc für IdDie
@GeneratedValue
Anmerkung dient zum Konfigurieren der Inkrementierungsart der angegebenen Spalte (Feld). Beispielsweise können Sie bei der Verwendung in der Definition der TabelleMysql
angebenauto_increment
, dass sie selbst inkrementell sein soll, und dann verwenden@GeneratedValue(strategy = GenerationType.IDENTITY)
im Java-Code, um anzuzeigen, dass Sie auch die Verwendung dieser datenbankserverseitigen Strategie bestätigt haben. Sie können den Wert in dieser Anmerkung auch ändern, um ihn an unterschiedliche Anforderungen anzupassen.
1. Definieren Sie die Reihenfolge in der Datenbank
Zum Beispiel muss Oracle
sequence
als Inkrementierungsmethode verwenden, sagen wir, wir erstellen eine Sequenz in Oracle:create sequence oracle_seq;
2. Beziehen Sie sich auf die Datenbanksequenz
Nachdem wir die Sequenz in der Datenbank haben, müssen wir jedoch die Beziehung zwischen Java und DB mithilfe von Folgendem herstellen
@SequenceGenerator
:@SequenceGenerator(name="seq",sequenceName="oracle_seq")
sequenceName
ist der wirkliche Name einer Sequenz in Oracle,name
wie Sie ihn in Java nennen möchten. Sie müssen angeben,sequenceName
ob es sich von unterscheidetname
, andernfalls verwenden Sie einfachname
. Normalerweise ignoriere ichsequenceName
, um meine Zeit zu sparen.3. Verwenden Sie die Sequenz in Java
Schließlich ist es Zeit, diese Sequenz in Java zu verwenden. Fügen Sie einfach hinzu
@GeneratedValue
:@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
Das
generator
Feld bezieht sich darauf, welchen Sequenzgenerator Sie verwenden möchten. Beachten Sie, dass es sich nicht um den tatsächlichen Sequenznamen in der Datenbank handelt, sondern um den Namen, den Sie imname
Feld von angegeben habenSequenceGenerator
.4. Vervollständigen Sie
Die vollständige Version sollte also so aussehen:
public class MyTable { @Id @SequenceGenerator(name="seq",sequenceName="oracle_seq") @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq") private Integer pid; }
Verwenden Sie nun diese Anmerkungen, um Ihre JavaWeb-Entwicklung zu vereinfachen.
quelle
In einem objektrelationalen Zuordnungskontext muss jedes Objekt eine eindeutige Kennung haben. Mit der
@Id
Annotation geben Sie den Primärschlüssel einer Entität an.Die
@GeneratedValue
Anmerkung wird verwendet, um anzugeben, wie der Primärschlüssel generiert werden soll. In Ihrem Beispiel verwenden Sie eineIdentity
Strategie, dieEs gibt andere Strategien, mehr können Sie hier sehen .
quelle
Simply, @Id: This annotation specifies the primary key of the entity. @GeneratedValue: This annotation is used to specify the primary key generation strategy to use. i.e Instructs database to generate a value for this field automatically. If the strategy is not specified by default AUTO will be used. GenerationType enum defines four strategies: 1. Generation Type . TABLE, 2. Generation Type. SEQUENCE, 3. Generation Type. IDENTITY 4. Generation Type. AUTO GenerationType.SEQUENCE With this strategy, underlying persistence provider must use a database sequence to get the next unique primary key for the entities. GenerationType.TABLE With this strategy, underlying persistence provider must use a database table to generate/keep the next unique primary key for the entities. GenerationType.IDENTITY This GenerationType indicates that the persistence provider must assign primary keys for the entity using a database identity column. IDENTITY column is typically used in SQL Server. This special type column is populated internally by the table itself without using a separate sequence. If underlying database doesn't support IDENTITY column or some similar variant then the persistence provider can choose an alternative appropriate strategy. In this examples we are using H2 database which doesn't support IDENTITY column. GenerationType.AUTO This GenerationType indicates that the persistence provider should automatically pick an appropriate strategy for the particular database. This is the default GenerationType, i.e. if we just use @GeneratedValue annotation then this value of GenerationType will be used.
Referenz: - https://www.logicbig.com/tutorials/java-ee-tutorial/jpa/jpa-primary-key.html
quelle