Coding the entities
Your database entities need to implement BinEntity interface. For convenience, you might like to have an AbstractEntity class from which your entities inherit. See an example below, which uses Spring-Data-Mongo.
package org.metaframe.spa.data; import java.util.Date; import org.bson.types.ObjectId; import org.codehaus.jackson.annotate.JsonIgnore; import org.metaframe.entitybin.BinEntity; import org.springframework.data.annotation.Id;
/** * Base class for all entities * * @author sanjay */ public abstract class AbstractEntity implements BinEntity<String> { /** * Primary key */ @Id protected String id; /** * Created at */ protected Date createdAt = new Date(); /** * Version for optimistic locking */ protected int version = 1; public int getVersion() { return version; } public void setVersion(int version) { this.version = version; } public String getId() { return id; } public void setId(String id) { this.id = id; } @JsonIgnore public ObjectId getOid() { return ObjectId.massageToObjectId(id); } public Date getCreatedAt() { return createdAt; } public void setCreatedAt(Date createdAt) { this.createdAt = createdAt; } }
Below is an example class inheriting from AbstractEntity.
package org.metaframe.spa.auth; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import org.metaframe.entitybin.TrackHistory; import org.metaframe.spa.data.AbstractEntity; import org.metaframe.spa.dto.SensitiveData; import org.metaframe.spa.dto.UserData; import org.metaframe.spa.forms.UserForm; import org.metaframe.spa.util.SpaUtil; import org.springframework.data.annotation.TypeAlias; import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.Document; /** * User entity. Needs to be serializable as Spring serializes it * * @author sanjay */ @Document @TypeAlias("user") public class User extends AbstractEntity implements Serializable { . . . @TrackHistory @Indexed(unique=true) @NotNull @Size(min=1, max=EMAIL_MAX_SIZE) @Pattern(regexp = ONLY_EMAIL_REGEX) private String email; . . . @TrackHistory @NotNull @Size(min=NAME_MIN_SIZE, max=NAME_MAX_SIZE) private String name; @Size(max=ABOUT_MAX_SIZE) private String about; . . . }
Comments are disabled for this space. In order to enable comments, Messages tool must be added to project.
You can add Messages tool from Tools section on the Admin tab.