0

非常に興味深い問題があります。サーバーにいくつかの値を設定し、Bean をクライアントに送信すると、その値なしでサーバーに返されます。

1. クライアントは
EntityRequest.getEntity(params) を介して DB からいくつかの Bean を要求します
2. Hibernate を介してデータベースから Bean をフェッチします
3. いくつかの一時的なプロパティを設定します4. EntityRequest
のメソッドを介して Bean をクライアントに送信します。
5. クライアントは他のいくつかの値を変更し、呼び出しは持続します。
6. サーバーが Bean を受け取り、 -
クライアントから適切にプロパティが設定されている - サーバーから設定されたプロパティ (ステップ 3) が ERASED / IGNORED である

RF メカニズムが、クライアントからの変更のみを含む、新しく DB をロードしたバージョンを送信してきたようです。いくつかの調査を行ったところ、Bean バージョンの問題があったに違いないようです。Bean にはバージョンが設定されており (以下を参照)、Hibernate によって使用され、RF によっても使用されていると思います。

自分の価値をクライアントに還元するにはどうすればよいですか? 「entity.version++;」をいくつか試しました ステップ3で、しかしそれは動作しません。

@Entity
public class Person {

    @Id
    @GeneratedValue
    private Long id;

    @Version
    private Integer version;

    @Field
    private String name;

    @Transient
    private Long participationId;

    ...

    public Long getId() {
        return id;
    }

    public Integer getVersion() {
        return version;
    }

    ...
}

public static Person findPerson(Long id) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    try {

        Object p = session.get(Person.class, id);
        session.getTransaction().commit();

        return p != null ? (Person) p : null;

    } catch (RuntimeException e){
        logger.error("Person.findPerson", e);
        session.getTransaction().rollback();
        throw e;
    }
}
4

1 に答える 1

0

Thomas Broyer の助けを借りて、私は RequestFactory メカニズムをより理解し、これが解決策につながりました。クライアント側からオブジェクトを返す際の RequestFactory は、domaing オブジェクトをキャッシュから取り出すのではなく、新しいオブジェクトを取得して差分を取得します。取得は、Locator またはドメイン オブジェクトの find(id) 関数を使用して行われます。私の場合はfind(id)でした。

解決策は醜いハックですが、うまくいきます。これは私のエンティティにあります

public class Person {
...
@Transient
private Long participationId;

@Transient
private Long participationStoreId;
...
}

RF に送信する前に、partitionId をロードします。クライアント側では、それを保持するために、返送する前に次のことを行います。

person.setParticipationStoreId(person.getParticipationId());

私に卵を投げつける前に、私は繰り返します。私はそれが醜いハックだと知っています. しかし、場合によっては、クライアントとの間でエンティティに何らかの値が必要であり、DB には入れたくないことがあります。これが機能する唯一の方法でした。

于 2012-11-14T22:14:12.280 に答える