0

JPA 2.0を読んでいます。という文に出会います。

We have used the transient modifier instead of the @Transient annotation so that 
if the Employee gets serialized from one VM to another then the translated name 
will get reinitialized to correspond to the locale of the new VM.

@Entity
public class Employee {
    @Id private int id;
    private String name;
    private long salary;
    transient private String translatedName;
    // ...
    public String toString() {
        if (translatedName == null) {
            translatedName = ResourceBundle.getBundle("EmpResources").getString("Employee");
        }
        return translatedName + ": " + id + " " + name;
    }
}

私が理解したのは、 @Entity アノテーションを使用し、コンテナーがそれに遭遇すると、それを行う JPA プロバイダーを呼び出すということです。データベースのID列にIDをマップするように。名前と給与の @Column アノテーションについては言及しませんでしたが、デフォルトでは、データベースの列 NAME と SALARY にマップされます。私たちは、translatedName に transient を使用したので、JAP は、マッピングを適用せずにそのままにしておきます。このクラスの単なるフィールドです。しかし、私は文の理解を得ることができません

if the Employee gets serialized from one VM to another

誰か説明してくれませんか?また、JAP のワークフローについて上で定義したことは正しいですか? コンテナが @Entity アノテーションに遭遇するとどうなるでしょうか?

ありがとう

4

3 に答える 3

2

クラスがインターフェースを実装するjava.io.Serializableと、このクラスのインスタンスはシリアライズ可能になります。これは、JVM がオブジェクトを一連のバイトに変換できることを意味します。これらのバイトは、ネットワーク経由で送信するか、ディスクに保存することができ、別の VM で読み取って Java オブジェクトに変換することができます。

フィールドにtransientJava キーワードがある場合、このフィールドはこのシリアライゼーション メカニズムによって無視されることを意味します。フィールドはシリアル化されません。

で注釈が付けられた@Transientフィールドは、JPA によって非永続フィールドと見なされます。データベースに保存せず、データベースからロードしません。ただし、オブジェクトが別の JVM に送信されると、シリアライズされます。

Javatransientキーワードは自動的にフィールドを作成します@Transient。これは、transientフィールドがシリアル化されず、JPA によって保存されないことを意味します。

于 2012-05-31T07:23:17.880 に答える
0

エンティティ アーティビュートの状態を DB に保存したくない場合、および状態を別の jvm に転送したくない場合は、Transientキーワードを使用します。

エンティティ アーティビュートの状態を DB に保存したくないが、状態を別の jvm に転送したい場合は、@Transient注釈を使用します。

于 2012-06-01T05:20:41.807 に答える
0

「JEE5 ワールド」では、転送オブジェクトを使用する場合と同様に、切り離されたエンティティを使用できます。(私はこれが良いアイデアかどうかを判断しているわけではありません!)

したがって、たとえば、シリアライゼーションに関する通常のリモート呼び出しセマンティクスを使用して、リモートで Employee のインスタンスを返すサービス メソッド (EJB 3 SLSB メソッドなど) を呼び出すことができます。

クラスが Serializable を実装していないため、Employee のインスタンスが正常にシリアライズされた場合、Java ランタイムが壊れている可能性があることに注意してください。

于 2012-05-31T07:45:44.570 に答える