For example, an Employee can have a number of photos. EmployeePhoto is a LOB.
@Entity(name="EmployeePhoto")
@Table(name="EmployeePhoto")
public class EmployeePhoto extends LobBase implements ChildEntity {
private Employee employee;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
@ParentEntity
@ManyToOne
@JoinColumn(nullable=false, name="employeeId")
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee issue) {
this.employee = issue;
}
/**
* Ordering items within owing entity
*/
@Override
public Integer getSequenceNo() {
return sequenceNo;
}
@Override
@Column(nullable=false, length=30)
public String getName() {
return name;
}
@Override
@Column(nullable=false, length=30)
public String getFileName() {
return fileName;
}
}
public class Employee extends PersistenceEntityBase implements NormativeId {
...
private List<EmployeePhoto> photos;
@OneToMany(cascade={CascadeType.ALL}, orphanRemoval=true, fetch=FetchType.LAZY,
mappedBy="employee", targetEntity=EmployeePhoto.class)
@OrderBy(PersistenceEntity.PROPERTY_SEQUENCE_NO + " ASC")
public List<EmployeePhoto> getPhotos() {
return photos;
}
public void setPhotos(List<EmployeePhoto> photos) {
this.photos = photos;
}
}
EmployeePhoto is ChildEntity. The list of photos are shown as a
slideshow using EntityMediaProperty in their owing entity backing
bean EmployeeBean.
@Property(name=Employee.PROPERTY_PHOTOS,
view={ViewType.ENTITY, ViewType.ENTITY_LIST_WIDE},
mode={ModeType.VIEW},
entityPropertyType=EntityMediaProperty.class,
renderStyle=@RenderStyleDef(style=RenderStyle.MEDIA))
Large objects are created by uploading files and deleted from
their EntityListBackingBean. That is, the media property will be switched
to entity list form bean for managing attachments.
If the lobs are not media (image, audio or video), they should be shown as an entity list FormBean.
@Property(name=Employee.PROPERTY_PHOTOS,
view={ViewType.ENTITY},
entityPropertyType=EntityFormBeanProperty.class)
In the lob list formBean, a file upload dialog can be opened to
upload files and create new lob entities.
If there is any lob entity that is a media, the slideshow command
will switch the formBean to a media property for slideshow.
Deleting lob entities will delete their associated lob files on file system.
[dataAccessUnit.home]/modules/[module]/[dataTypeName]/[idPath]-fileNameFor example, an EmployeePhoto whose id is 0a01(hex) and file name is photo1.png. Its file path is:
[dataAccessUnit.home]/modules/ExampleHR/EPHO/00/00/0a/01-photo1.pngthe Id path is hierarchical (4-levels) such as 00/00/0a/01, so Lob files are stored under hierarchical directories.
[dataAccessUnit.home] is the root directory of the DataAccessUnit(instanceType or instance).
For system: [cmobilecom.home]/dau/system For instanceType: [cmobilecom.home]/dau/instanceTypeId For instance: [cmobilecom.home]/dau/instanceTypeId/instances/[instance_id_path]To change lob file path, override getRelativePath() of LobBeanBase. For example,
public void EmployeePhotoBean extends LobBeanBase<EmployeePhoto> {
@Override
protected String getRelativePath(EmployeePhoto entity) {
}
}