私は Couchbase に対する Spring Data のサポートを評価しており、次の問題に遭遇しました。2 つの POJO クラスと、それぞれに対して定義およびインスタンス化されたリポジトリがある、次の疑似コードの例を考えてみましょう。
public class Foo
{
@Id
private String _id;
@Version
private Long _rev;
// .. Other data and members.
}
public class Bar
{
@Id
private String _id;
@Version
private Long _rev;
// .. Other data and members.
}
//
// Repositories
//
@Repository
public interface FooRepository extends CrudRepository<Foo, String> {
}
@Repository
public interface BarRepository extends CrudRepository<Bar, String> {
}
どちらのリポジトリも同じ Couchbase バケットを利用しています。次:
// Create a new Foo object and save it.
Foo f = new Foo( "id_1" );
fooRepository.save( f );
// Now, try fetching a Bar object using the ID of a Foo object (?)
Bar b = barRepository.findOne( "id_1" );
これにより、Bar オブジェクトが返されますが、適切に初期化されず、例外は発生しません。問題は、このシナリオでエラーが表示されないのはなぜですか? 要求された型が永続化された型と一致しない場合に例外を発生させることは、それほど難しいことではないようです。何か不足していますか?
FWIW、管理コンソールを介してCouchbaseの生ドキュメントを見ると、それぞれに「_class」プロパティが含まれており、おそらくデータを表すために使用されるクラスを識別し、そのような不一致を検出するために使用できることがわかります。