# morphia
**Repository Path**: opensrc/morphia
## Basic Information
- **Project Name**: morphia
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2014-06-23
- **Last Updated**: 2024-05-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Morphia
[](https://jenkins.10gen.com/job/morphia/)
Morphia is a lightweight type-safe library for mapping Java objects to/from [MongoDB](http://www.mongodb.org/). Morphia provides a
typesafe, and fluent [Query](https://github.com/mongodb/morphia/wiki/Query) API support with (runtime) validation. Morphia
uses annotations so there are no XML files to manage or update. Morphia should feel very comfortable for any developer with JPA
experience.
##Features
- [Lifecycle Method/Event](https://github.com/mongodb/morphia/wiki/LifecycleMethods) Support
- Works great with Guice, Spring, and other DI frameworks.
- Many extension points (new annotations, converters, mapping behavior, logging, etc.)
- Does not store Null/Empty values (by default).
- GWT support (entities are just POJOs) -- (GWT ignores annotations)
- Advanced mapper which allows raw conversion, `void toObject(DBObject)` or ` DBObject fromObject(Object)`
Please continue by reading the QuickStart or looking at a list of [the annotations](https://github.com/mongodb/morphia/wiki/AllAnnotations).
If you have further questions, please reach out to us on our [mailing list](https://groups.google.com/forum/#!forum/morphia).
## Quick start
### Including morphia in your build
**Maven**
```xml
org.mongodb.morphia
morphia
###
```
See the [dependencies](https://github.com/mongodb/morphia/wiki/Dependencies) page for more detail.
### Sample code
```java
@Entity("employees")
class Employee {
// auto-generated, if not set (see ObjectId)
@Id ObjectId id;
// value types are automatically persisted
String firstName, lastName;
// only non-null values are stored
Long salary = null;
// by default fields are @Embedded
Address address;
//references can be saved without automatic loading
Key manager;
//refs are stored**, and loaded automatically
@Reference List underlings = new ArrayList();
// stored in one binary field
@Serialized EncryptedReviews;
//fields can be renamed
@Property("started") Date startDate;
@Property("left") Date endDate;
//fields can be indexed for better performance
@Indexed boolean active = false;
//fields can loaded, but not saved
@NotSaved string readButNotStored;
//fields can be ignored (no load/save)
@Transient int notStored;
//not @Transient, will be ignored by Serialization/GWT for example.
transient boolean stored = true;
//Lifecycle methods -- Pre/PostLoad, Pre/PostPersist...
@PostLoad void postLoad(DBObject dbObj) { ... }
}
...
Datastore ds = ...; // like new Morphia(new Mongo()).createDatastore("hr")
morphia.map(Employee.class);
ds.save(new Employee("Mister", "GOD", null, 0));
// get an employee without a manager
Employee boss = ds.find(Employee.class).field("manager").equal(null).get();
Key scottsKey =
ds.save(new Employee("Scott", "Hernandez", ds.getKey(boss), 150**1000));
//add Scott as an employee of his manager
UpdateResults res =
ds.update(
boss,
ds.createUpdateOperations(Employee.class).add("underlings", scottsKey)
);
// get Scott's boss; the same as the one above.
Employee scottsBoss =
ds.find(Employee.class).filter("underlings", scottsKey).get();
for (Employee e : ds.find(Employee.class, "manager", boss))
print(e);
```
**Note**: @Reference will not save objects, just a reference to them; You must save them yourself.