注解原始和级别类型的属性
保存原始和基本类型的属性到Mongo中,你不必为他们添加任何注解:
- ...
- private int myInt;
- private Date myDate;
- private List<String> myStrings;
- private String[] stringArray;
- ...
MongoDB仅仅有一下数据类型:
- Integer(32位有符号值)
- Long(64有符号值)
- Double(64位IEEE745浮点值)
- String (字符串)
这里有些有价值的转换:
- float → double
- byte → int
- short → int
- char → String
并且,依赖于你的模型中存在的类型和数据库将会试着自动为你转换。我的意思是,因为在MongoDB数据库中只存在三种数字类型(32/64有符号, 64位FP)这将相当
容易转换。下面的列表为当前什么样的基本和原始类型可以被保存:
- enum(在Mongo中作为String保存)
- java.util.Date(在Mongo中保存为从新纪元UTC的毫秒数)
- java.util.Locale(作为字符串保存)
- com.mongodb.DBRef
- com.mongodb.ObjectId
正如我我们上面的例子所示,Morphia还支持java.util.List, java.util.Set和java.util.Map容器, 和任何支持的原始类型的数组。
如果你想把一个属性排除映射到Mongo中, 你可以使用@Transient注解:
- import com.google.code.morphia.annotations.Transient;
- ...
- @Transient private int myTransientInt;
- ...
- import com.google.code.morphia.annotations.Property;
- ...
- @Property("my_integer")
- private int myInt; //在MongoDB中为my_integer
- ...
User Collections(使用容器)
Morphia 支持容器(List, Set, Map) 和数组(Integer)
- ...
- private Set<String> tags;
- private Map<String,Translation> translations;
- @Reference
- private List<Article> relatedArticles;
- ...
- java.util.ArrayList for List
- java.util.HashSet for Set
- java.util.hashMap for Map
如果你想使用其他的实现, 你可以在注解中重写他们
- ...
- @Property(concreteClass = java.util.TreeSet.class)
- private Set<String> tags;
- @Embedded(concreteClass = java.util.TreeMap.class)
- private Map<String,Translation> translations;
- @Reference(concreteClass = java.util.Vector.class)
- private List<Article> relatedArticles;
- ...