2012-01-19 2 views
0

JPA 2.0을 jpa-provider로 hibernate와 함께 사용하고 있습니다. 프로젝트의 방향은 DAO의 JPA 구현을 중립으로 유지하는 것입니다. 그래서 나는 최대 절전 모드 세션 객체 나 최대 절전 모드와 관련된 모든 것을 사용할 수 없다. 우리는 조회의 꽤 많은 수를 가지고 이러한 조회 값이 나는 그들이 주로 기간, 예를 들어 일정하게 유지 의미가에 의해 정기적으로 있어야하는데, 우리는이 말을 내가 기본 조회 클래스를 디자인 한jpa 2.0 지속성 : 딜레마 생성 및 업데이트

Currency code --> Drachma 
Description --> Greece 
From date --> 01-Jan-1960 
To date --> 01-Nov-2005 (this is just an example) 

Currency code --> Euro 
Description --> Greece 
From date --> 02-Nov-2005 
To date --> null (null indicates until today) 

환율 조회 테이블 각각 만들거나 기업의 업데이트 n 개의 수를 포함하는 모든 조회

이처럼 보이는
@MappedSuperclass 
public abstract class BaseLookupEntity { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long id; 

@Column(name = "code", nullable = false) 
private String code; 

@Column(name = "description", nullable = false) 
private String description; 

@Column(name = "from_date", nullable = false) 
@Temporal(TemporalType.DATE) 
private Date fromDate; 

@Column(name = "to_date") 
@Temporal(TemporalType.DATE) 
private Date toDate; 

// getters and setters 

딜레마는 서비스 계층이 더 신원 필드 클라이언트에서 새로운 인스턴스를받는 점을 감안

입니다 suc h 정기적 조회 코드를 사용하려면 이러한 조회 테이블을 모두 명시 적으로 쿼리하여 이러한 값이 존재하는지 확인하고, 존재하고 업데이트가 필요한 경우 to_date 열을 업데이트 한 다음 새 조회 항목을 만드십시오.

DIY 로직을 수행해야합니까, 아니면 노력을 최소화하기 위해 JPA에 사용할 수있는 메커니즘이 있습니까?

건배.

답변

1

원하는 기능을 수행하는 기본 제공 메커니즘은 없지만 실제로 어렵지는 않습니다. select c from Currency c where c.code in (:codes) and c.toDate is null가 (코드의 수에 대한 데이터베이스 제한보다 큰 있지 않은지 확인 :

  1. 모든 값을 가진 코드 당신이받는 코드 세트에 있고 그 TODATE 필드 널을 얻기 위해 JPQL 쿼리를 실행 그래서 경우 IN 절은하지만.,
  2. 발견 통화 목록에서 Map<String, Currency> (통화를 통해
  3. 으로 반복 업데이트 할 수있는 통화의 코드 인지도)의 키를 빌드) 여러 쿼리를 실행합니다. 각 통화에 대해지도에서 영구 버전을 찾습니다. 지도에있는 경우 toDate 필드를 업데이트하십시오.
  4. 새 통화 인스턴스를 만들고 유지하십시오.

이 프로세스는 기본 클래스의 모든 구현에 대해 쉽게 일반화 할 수 있습니다.

+0

감사합니다. 도움이되었다. – JProgrammer