2009-08-25 3 views
0

에 따라 시퀀스를 생성 내가 할 노력하고있어일부 criterions에

@Entity 
public class Foobar { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToOne 
    private Organization organization; 

    private Long orderNr; 
} 

이 개체에 대한 증가하는 주문 번호를 생성하는 것입니다 다음 클래스를 가지고있다. 문제는 orderNr이 각 조직마다 고유해야한다는 것입니다. 예를 들어 두 개의 조직이 있다고 가정 해 봅시다 (조직을 org1 및 org2라고합시다). 먼저 Foobar의 인스턴스를 생성하고 조직을 org1로 설정합니다. 저장시 orderNr의 값은 '1'이되어야합니다. 그런 다음 Foobar의 또 다른 인스턴스를 만들고 조직을 다시 org1로 설정합니다. orderNr은 이제 '2'값을 가져야합니다 (Foobar의이 특정 인스턴스에 대해 첫 번째 Foobar는 여전히 '1'값을 가져야합니다). 그런 다음 우리는 Foobar의 또 다른 인스턴스를 만들지 만 조직을 org2로 설정하면 orderNr은 org2의 첫 번째 객체이므로 '1'값을 가져야합니다.

가장 쉬운 방법은 무엇입니까? JPA 나 Hibernate에서 (주석을 사용하여) 이와 같이 쉽게 할 수있는 것이 있습니까? 아니면 수동으로 카운터 값을 추적해야합니까?

==== 질문이 잘못 이해되어 편집을 완료했습니다.

+3

. 나에게 카운터는 foobar의 속성 같은 소리하지 않습니다 –

답변

0

먼저 카운터 값을 "저장시"로 설정해야하는 이유는 무엇입니까? 그건 힘들거야. 나는 대신 Foobar에 조직을 연결하는 시점에서 값을 설정하기를 원합니다.

두 번째로 폴 키블 (Paul Keeble)은 의견에서 언급했듯이이 값은 조직과 관련이있는 것처럼 보이며 그 클래스에 속합니다.

Foobars를 조직에 연결하는 방법을 만들 필요가 있습니다 (단순히 멤버 변수를 설정하는 것과 반대). 이 방법은 카운터를 설정해야합니다. 는 foobar에 따라서 :

 
    public void associateWithOrganization (Organization org) { 
     this.organization = org; 
     org.addAssociation (this); 
    } 

및 조직의 :

 
    public void addAssociation (Foobar foo) { 
     this.associationCounter ++; 
    } 
    ... 

은 또한 물론, "getNumberOfAssociationsForThisOrganization()"와 "removeAssociation (이)"방법이 필요합니다.

+0

너희들이 오해 카운터의 목적은 물론, 나는 그것을 나쁘게 명명했기 때문입니다.카운터는 "조직에 몇 개의 Foobars가 있는지"알려주지 않고 조직의 Foobar 주문 번호라고 생각합니다. "이것은 조직 X의 3 번째 Foobar입니다." 조직에 대한 것이 아니라 Foobar –

0

알겠습니다. 의견에도 불구하고 orderNrOrganization 대신 실제로 Foobar에 속합니다.

그러나 저는 이것이 다른 방식으로 구현되어야한다고 생각합니다. 나는 Hibernate가 당신이 원하는 것을 직접 지원한다고 생각하지 않는다. 적어도, 적어도.

타임 스탬프를 Foobar에 추가하면 인스턴스 생성 시간이 유지됩니다. 그런 다음, 당신은 또한

"SELECT COUNT (*) FROM Foobar WHERE organization = :myOrg AND timestamp < :myTimeStamp" 

같은 쿼리를 실행하여 실제 orderNr을 찾을 수있는, 아마도 OrganizationList<Foobar> (즉, @OneToMany(mappedBy = "organization")로 매핑하여. 물론, 아마도 당신이 그것을 필요하지 않습니다이있을 것 .

카운터기구 클래스에 있어야 조직으로는 foobar 클래스 조직과는? 모든 및 고유 선언 왜
관련 문제