다 - 대 - 다 관계를 조정하기 위해 grails에서 연관 테이블을 만드는 것에 대한 질문이 있습니다. 설정은 다음과 같습니다. 1. 도메인 A (클라이언트 프로파일)는 많은 도메인 B (친구) 을 가질 수 있습니다. 2. 각 도메인 B (친구)는 많은 도메인 A (클라이언트 프로파일) 을 가질 수 있습니다. 3.이를 해결하려면 다음을 수행해야합니다. 각 테이블에서 FK가있는 연관 테이블 (또는 도메인)을 만듭니다.Grails 도메인 생성 연관 테이블
class DomainA{
String id
String firstName
String lastName
static hasMany = [domainB: DomainB]
static mapping = {
cache true
id generator: 'assigned'
columns {
firstName type:'text'
lastName type:'text'
alumConnections column: 'domaina_id', joinTable: 'a_b'
}
}
static constraints = {
firstName (nullable:true)
lastName (nullable:true)
}
}
DOMAINB 코드 :
class DomainB{
String id
String firstName
String lastName
static hasMany = [domainA:DomainA]
static belongsTo = DomainA
static mapping = {
cache true
id generator: 'assigned'
columns {
firstName type:'text'
lastName type:'text'
domainA column: 'domainb_id', joinTable: 'a_b'
}
}
static constraints = {
firstName (nullable:true)
lastName (nullable:true)
}
}
도메인 A_B 코드 :
class AB{
Date dateCreated
Date lastUpdated
long version
}
이 도메인은 도메인 C (client_friend는) 다음
내가 지금까지 가지고있는 코드 이름을 지정할 수 있습니다
이 코드를 실행하면 작동하는 것 같습니다. MySQL을 사용하는 테이블이 생성되고, FK가 제자리에있는 것처럼 보입니다. DomainB 클래스에 데이터를 입력하면 데이터가 입력되고 DomainA와 DomainB의 PK가 모두 A_B에 삽입됩니다. 그러나 A_B에서 값을 삭제하려고하면 문제가 발생합니다. 나는이 같은 시도했다 :
AB results =AB.findByAIdAndBId('jIi-hRi4cI','2BYvuA2X14')
을하지만, 오류 얻을 : InvalidPropertyException : 이름을 찾을 수 없습니다 속성을 [A_ID] 클래스 [클래스는 mgr.AB]
내 질문은 이것이다 : 첫째,이 나는 이것을 올바르게 설정했다? 둘째로, 그렇다면 PK가 DomainA와 DomainB의 합성물로 구성된 AB 테이블을 어떻게 쿼리합니까?
도움 주셔서 감사합니다.
제이슨
답변 해 주셔서 감사합니다. 내 예에서 DomainA와 DomainB는 어떨까요? 나는 '속한다'와 '많은 것이있다'를 제거해야합니까? – jason
예, 필요하지 않습니다. 나는 그것을 처리하는 방법을 반영하기 위해 나의 대답을 업데이트 할 것이다. – Gregg
감사합니다. 이러한 변경 사항을 적용하고 작동 방식을 확인합니다. – jason