サーチ…


パラメーター

注釈詳細
@Id エンティティのキーとしてフィールド/列をマークします。
@Basic 要求されたフィールドを基本タイプとしてマップすることをマークします。これはプリミティブ型とそのラッパー、 StringDateCalendar適用されCalendar 。パラメタが与えられていない場合、実際には注釈はオプションですが、意図を明確にするためにはスタイルが良いでしょう。
@Transient 一時的なものとしてマークされたフィールドは、直列化のtransientキーワードと同様に、永続性のために考慮されません。

備考

常にデフォルトのコンストラクタ、つまりパラメータのないコンストラクタが必要です。基本的な例では、コンストラクタが指定されていなかったので、Javaは1を追加しました。引数を持つコンストラクタを追加する場合は、パラメータのないコンストラクタも必ず追加してください。

非常に簡単なエンティティ

@Entity
class Note {
    @Id
    Integer id;
 
    @Basic
    String note;

    @Basic
    int count;
}

Getters、setterなどは簡潔に省略されていますが、JPAには必要ありません。

このJavaクラスは、次の表にマッピングされます(データベースに応じて、Postgresマッピングの可能性があります)。

CREATE TABLE Note (
  id integer NOT NULL,
  note text,
  count integer NOT NULL
)

JPAプロバイダを使用してDDLを生成し、ここに示すDDLとは異なるDDLを生成する可能性がありますが、互換性がある限り実行時に問題は発生しません。 DDLの自動生成に頼らないことが最善です。

マッピングからのフィールドの省略

@Entity
class Note {
    @Id
    Integer id;
 
    @Basic
    String note;

    @Transient
    String parsedNote;

    String readParsedNote() {
        if (parsedNote == null) { /* initialize from note */ }
        return parsedNote;
    }
}

クラスにデータベースに書き込まれてはならないフィールドが必要な場合は、 @Transientとしてマークします。データベースからの読み取り後、フィールドはnullになりnull

マッピングの時間と日付

Javaでは、 DateCalendar 、そして最近のLocalDateLocalDateTime歴史的なDateCalendarがあります。 TimestampInstantZonedLocalDateTimeZonedLocalDateTime -timeの各タイプがあります。データベース側では、 timedatetimestamp (時刻と日付の両方)を持ちdatetimestampゾーンの有無にかかわらず可能性があります。

Java 8より前の日付と時刻

プリJava-8タイプのjava.util.Datejava.util.Calendar 、およびjava.sql.TimestampデフォルトマッピングはSQLのtimestampです。 java.sql.Date場合はdateです。

@Entity
class Times {
    @Id
    private Integer id;

    @Basic
    private Timestamp timestamp;

    @Basic
    private java.sql.Date sqldate;

    @Basic
    private java.util.Date utildate;

    @Basic
    private Calendar calendar;
}

これは、次の表に完全に対応します。

CREATE TABLE times (
    id integer not null,
    timestamp timestamp,
    sqldate date,
    utildate timestamp,
    calendar timestamp
)

これは意図ではないかもしれません。たとえば、JavaのDateまたはCalendarは、日付のみを表すために(生年月日のために)使用されることがよくあります。デフォルトのマッピングを変更するには、またはマッピングを明示的にするために@Temporalアノテーションを使用します。

@Entity
class Times {
    @Id
    private Integer id;

    @Temporal(TemporalType.TIME)
    private Date date;

    @Temporal(TemporalType.DATE)
    private Calendar calendar;
}

同等のSQLテーブルは次のとおりです。

CREATE TABLE times (
    id integer not null,
    date time,
    calendar date
)

注1: @Temporal指定された型はDDL生成に影響します。 @Basic注釈だけでDate型のdate型の列を持つこともできます。

注2: Calendartimeだけ持続することはできません。

Java 8の日付と時刻

JPA 2.1では、Java 8で提供されているjava.time型のサポート定義されていませ java.time 2.1実装の大部分は、厳密にはベンダー拡張ではありますが、これらのタイプのサポートを提供しています。

DataNucleusの場合、これらのタイプは@Temporalで動作し、 @Temporalアノテーションを使用してさまざまなマッピングの可能性を提供します。

Hibernateの場合、Hibernate 5.2+を使用している場合、 @Basicアノテーションを使用するだけですぐに@Basicます。 Hibernate 5.0-5.1を使用している場合は、依存関係org.hibernate:hibernate-java8を追加する必要があります。提供されるマッピングは

  • LocalDatedate
  • InstantLocalDateTimeZonedDateTimetimestamp ZonedDateTime

ベンダーに依存しない代替方法は、永続化が必要なJava 8のjava.time型のJPA 2.1 AttributeConverterを定義することです。

シーケンス管理されたIDを持つエンティティ

ここではクラスがあり、IDフィールド( userUid )にデータベース内のSEQUENCEを介して値が生成されるようにします。このSEQUENCEはUSER_UID_SEQUSER_UID_SEQれ、DBAによって作成されるか、JPAプロバイダによって作成されます。

@Entity
@Table(name="USER")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name="USER_UID_GENERATOR", sequenceName="USER_UID_SEQ")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="USER_UID_GENERATOR")
    private Long userUid;

    @Basic
    private String userName;
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow