エンティティがデータ ソースから読み取られた後に @Transient とマークされたフィールドに値を設定するための最良の解決策は何ですか?
私はEclipseLinkを使用しており、Spring Beanを使用して(明らかにDIを使用して)デフォルト値も取得する必要があるため、彼のpostBuildイベントソリューションでDescriptorEventAdapterを試していますが、私がしているより簡単なソリューションがあるかどうかはわかりますない。
前もって感謝します
エンティティがデータ ソースから読み取られた後に @Transient とマークされたフィールドに値を設定するための最良の解決策は何ですか?
私はEclipseLinkを使用しており、Spring Beanを使用して(明らかにDIを使用して)デフォルト値も取得する必要があるため、彼のpostBuildイベントソリューションでDescriptorEventAdapterを試していますが、私がしているより簡単なソリューションがあるかどうかはわかりますない。
前もって感謝します
リポジトリまたは DAO を使用している場合の簡単な方法は次のとおりです。
@Repository
class YourRepository {
@Autowired
private Bean bean;
@PersistenceContext
private EntityManager entityManager;
@Transactional(readOnly = true)
public YourEntity find(..) {
YourEntity entity = lookupUsingEntityManager();
entity.transientField = bean.getDefaultValue();
return entity;
}
}
アクティブな record スタイルのエンティティを使用している場合の別のアプローチを次に示します。
@Entity
class YourEntity {
@Transient
public Object field;
@PostLoad
public void populateField() {
field = new BeanHolder().bean.getDefaultValueForField();
}
@Configurable
private static class BeanHolder {
@Autowired private Bean bean;
}
}
準擬似コードに注意してください。後者のアプローチは、コンパイル時またはロード時の AspectJ weaving with を使用する場合にのみ機能することに注意してください<context:spring-configured />
。
一時的なフィールドを持つエンティティがあり、値は常に DI を使用してサービスから取得されますか?
エンティティとサービスのライフサイクルはまったく異なることに注意してください。時間の経過とともに値が変化するため、エンティティのライフサイクルの開始時にエンティティのファクトリで値を提供しても意味がありませんか?