...Morphia投影動作
Student.class(省略方法)
@Entity(value = "students", noClassnameStored = true)
public class Student
{
@Id
private String id = new ObjectId().toString();
private String name;
private String city = "London"; // Default Value
}
NOTEをその方法Morphiaが設計されている場合、私はわからないが、ここでは行きます:DEFAULT値をに割り当てました。インスタンス変数city
です。今出力 今のコード...
Student s1 = new Student("James Bond"); // London IS his default city
ds.save(s1);
Student s2 = new Student("Jason Bourne");
s2.setCity("New York"); // Set a city for Mr. Bourne
ds.save(s2);
System.out.println("----- Normal -----");
List<Student> studentsNormal = ds.createQuery(Student.class).asList();
for(Student s: studentsNormal)
System.out.println(s);
System.out.println("----- Projected -----");
Query<Student> query = ds.find(Student.class);
query.retrievedFields(false, "city");
List<Student> studentsProjected = query.asList();
for(Student s: studentsProjected)
System.out.println(s);
そして、...
----- Normal ----- Student{id='57337553db4f0f0f10a93941', name='James Bond', city='London'} Student{id='57337553db4f0f0f10a93942', name='Jason Bourne', city='New York'} ----- Projected ----- Student{id='57337553db4f0f0f10a93941', name='James Bond', city='London'} Student{id='57337553db4f0f0f10a93942', name='Jason Bourne', city='London'}
さて、Morphiaの行動について4つの質問...
Q1。ボンド氏の場合、私はcity
を変更せず、city
を投影リストから除外しましたが、city
のデフォルト値はLondon
と表示されます。これはnullではないはずですか?
Q2。ボーン氏の場合、city
をNew York
に変更しましたが、投影中もデフォルト値が選択され、London
と表示されました。これもnullではないでしょうか?
は、私はまだMorphiaからProjection.classを(そう今夜するつもり)見たhaventが、除外ため、Morphiaは、デフォルト値を拾うように思われないオーバー乗りnull
としないようです。私はインスタンス変数にデフォルト値を提供する方法がないので、これは妨げになります...
Q3。これはMorphiaかMongoD Java Driverの動作/問題ですか?
最後の質問...
Q4。これに関する既知の回避策はありますか?
私の周りGoogleで検索しているが、任意のソリューションや、これまでの説明を周りに来ていない...事前に
おかげで...
SG
私はJDK 1.1からJavaになっています。この「悪い習慣」は、Morphiaの観点からのものかもしれませんが、Javaによるものではありません。私の質問は、投影の意図されたデザインに関するものです。それ以外に、これを達成するための回避策はありますか? – SSG
一般的に、永続ライブラリは悪いことです。私は冬眠は同様の問題があると思います。とにかく、Morphiaでこれを解決する方法は、単純に初期化子を持たないことです。デフォルトの何らかの並べ替えとしてその値が必要な場合は、ある種のファクトリメソッドを検討してください。 – evanchooly
コード内の他の場所でエラーを回避するために、ランタイム割り当てを使用して初期化を削除しました...!それがどのように動作するかの概要を提供しているので、答えをマークしてください....! – SSG