ここで作業しているのは、Hibernateの上に構築された興味深いライブラリです。これは一般的なDAOの実装ですが、完全に先物で満たされています。例では、以下はそれらの1つです。
モデルにはすべてが遅延ロードされますが、データベースからいくつかの関係を取得する場合、通常は、取得するタイプのテンプレートオブジェクトを作成してから、取得する必要のある関係を設定します。たとえば、次のオブジェクトがあるとします。
@SuppressWarnings("serial")
@Entity
@Table(name="MYTABLE")
public class Type extends BaseAudit<TypeID>{
/**
* Este campo representa el codigo de autorizacion padre
*
*/
@Column(name="CODIGOTIPOAUTORIZACIONPADRE")
private Long codigonPadre ;
/**
* Este campo representa el nombre del tipo de autorizacion
*
*/
@Column(name="NOMBRETIPOAUTORIZACION")
private String nombreTipoAutorizacion ;
/**
*
*
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "CODIGOSISTEMA", referencedColumnName = "SYSID", insertable = false, updatable = false),
@JoinColumn(name = "CODIGOCOMPANIA", referencedColumnName = "COMID", insertable = false, updatable = false)
})
private CompanySystemDto companiaSistemaDTO;
/**
*
*
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "CODIGOCOMPANIA", referencedColumnName = "CODIGOCOMPANIA", insertable = false, updatable = false),
@JoinColumn(name = "CODIGOSISTEMA", referencedColumnName = "CODIGOSISTEMA", insertable = false, updatable = false),
@JoinColumn(name = "CODIGOTIPOAUTORIZACIONPADRE", referencedColumnName = "CODIGOTIPOAUTORIZACION", insertable = false, updatable = false),
})
private TipoAutorizacionDTO tipoAutorizacionPadreDTO;
@OneToMany(mappedBy="tipoAutorizacionPadreDTO")
private Collection<TipoAutorizacionDTO> listaAutorizaciones;
//..... Getters and Setters
関係のいずれかをフェッチする必要がある場合は、次のようにします。
Type myType = new Type();
myType.setTipoAutorizacionPadreDTO(new TipoAutorizacionPadreDTO()).
一言で言えば、ライブラリが行うことは、テンプレートでnullでないリレーションオブジェクトを検索し、いくつかの基準に基づいてデータベースからそれらを取得することです。基準は私たちが望むものなら何でもかまいません。したがって、codigonPadreが1であるすべてのTypeオブジェクトが必要であると仮定しましょう。テンプレートは、次のようになります。
Type myType = new Type();
myType.setCodigonPadre(1L);
myType.setTipoAutorizacionPadreDTO(new TipoAutorizacionPadreDTO()).
//Code for searching in the database
上記のテンプレートの機能は次のとおりです。codigonPadre属性が1であるすべてのTypeインスタンスを検索し、そのインスタンスのtipoAutorizacionPadreDTOリレーションをフェッチします。
この「オブジェクトテンプレート」システムは、JPQLやその他のJPAメカニズムよりもはるかに便利だと思います。JPA2仕様にCriteriaAPIが含まれていることを知っています。これにより、非常によく似たものを実現できます。しかし、問題は...このスタイルを管理するライブラリがすぐに使用できるかどうかです。
明らかに、私が話しているライブラリにはもっと多くの機能があります...たとえば、CriteriaRestrictionsと呼ばれるものがあり、テンプレートオブジェクトの属性の名前と必要な制限を指定します。例:
Type myType = new Type();
myType.setCodigonPadre(1L);
myType.setTipoAutorizacionPadreDTO(new TipoAutorizacionPadreDTO())
myType.setNombreTipoAutorizacion("likeValue");
myType.addCriteriaRestriction("nombreTipoAutorizacion",RestrictionType.INSENSITIVE_LIKE);
これにより、codigonPadreに1Lがあり、nombreTipoAutorizacionにその値内にlikeValueがあるすべてのオブジェクトがフェッチされます。
ライブラリを使用すると、特にオブジェクトをフェッチして検索するときに、特定のアクティビティを実行するためだけにサービスメソッドを作成しなくても、コーディングにかかる時間を節約できます。だから、インターネットで似たようなものを見つけて、将来のJEEプロジェクトで使えるようにしたいと思っています。
提案をありがとう。