2017-02-06 7 views
1

UserFileObject 클래스 사이에 다 대다 관계를 만들려고합니다. 사용자가 많은 파일 개체에 액세스 할 수 있고 파일 개체에 많은 사용자 및 일원이 액세스 할 수 있습니다. 한 사용자가 많은 파일을 소유 할 수 있지만 한 파일은 한 명의 사용자 만 소유 할 수 있기 때문에 다 대일 관계가됩니다. 여기 내 코드입니다 : 이론적으로JPA 다 대다 관계가 두 개의 조인 테이블을 만듭니다.

@Entity 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    public int id; 
    public String firstname; 
    public String lastname; 
    public String publicAttributes; 
    public String privateAttributes; 

    @ManyToOne 
    private Department department; 

    @OneToMany(mappedBy = "user") 
    public List<Device> devices = new ArrayList<Device>(); 

    @OneToMany(mappedBy = "userCreator") 
    public List <FileObject> fileOwned = new ArrayList <FileObject>(); 

    @ManyToMany 
    @JoinTable(name="USER_FILE_ACCESS") 
    public List<FileObject> fileHasAccess = new ArrayList<FileObject>(); 
} 

@Entity 
public class FileObject { 

    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    public int id; 
    String checksum; 

    @OneToMany(mappedBy = "fileObject") 
    public List<Policy> policies = new ArrayList<Policy>(); 

    byte[] encryptedFileKey; 

    byte[] iv; 

    @ManyToOne 
    public User userCreator; 

    @ManyToMany 
    public List<User> listUserAccessor = new ArrayList<User>(); 
} 

는 단 하나의 테이블, 즉 USER_FILE_ACCESS에 가입 만들어야하지만 내가 스크립트를 실행했을 때 그것은 두 개의 테이블을 조인 내가 왜 확실하지 않다 만듭니다.

show tables; 
+------------------+ 
| Tables_in_cpabe | 
+------------------+ 
| DEPARTMENT  | 
| DEVICE   | 
| FILEOBJECT  | 
| FILEOBJECT_USER | 
| POLICY   | 
| SEQUENCE   | 
| USER    | 
| USER_FILE_ACCESS | 
+------------------+ 

show columns from FILEOBJECT_USER; 
+---------------------+---------+------+-----+---------+-------+ 
| Field    | Type | Null | Key | Default | Extra | 
+---------------------+---------+------+-----+---------+-------+ 
| FileObject_ID  | int(11) | NO | PRI | NULL |  | 
| listUserAccessor_ID | int(11) | NO | PRI | NULL |  | 
+---------------------+---------+------+-----+---------+-------+ 

show columns from USER_FILE_ACCESS; 
+------------------+---------+------+-----+---------+-------+ 
| Field   | Type | Null | Key | Default | Extra | 
+------------------+---------+------+-----+---------+-------+ 
| User_ID   | int(11) | NO | PRI | NULL |  | 
| fileHasAccess_ID | int(11) | NO | PRI | NULL |  | 
+------------------+---------+------+-----+---------+-------+ 

가 어떻게 하나 개의 테이블로 테이블에 가입해야합니까 : 여기

는 SQL 명령의 발췌입니까? 그런 다음 양방향 관계를 갖고 싶어

+0

두 번째 @ManyToMany에 조인 테이블/매핑자가 없습니다. 어쩌면 그것을 봐야한다 – XtremeBaumer

+0

@XtremeBaumer 내가 조인 된 테이블의 다른 쪽에서 사용할 수있는 몇 가지 예를 보았다. 주석이 필요 없다. CMIIW –

답변

1

은 :

@Entity 
public class User { 

@ManyToMany 
@JoinTable(name="USER_FILE_ACCESS" 
    [email protected](name="user_id"), 
     [email protected](name="fileHasAccess_ID ")) 
public Set<FileObject> fileHasAccess; 


@Entity 
public class FileObject { 

@ManyToMany 
@JoinTable(name="USER_FILE_ACCESS" 
     [email protected](name="fileHasAccess_ID"), 
      [email protected](name="user_id")) 
    public Set<User> listUserAccessor; 

업데이트

시도를 대신 목록의 집합 사용할 수 있습니다.

다른 양방향 옵션을 사용해 볼 수도 있습니다. 다음과 같이 그래서 비 소유에 당신은지도 것 :

@ManyToMany(mappedBy = "fileHasAccess") 
public Set<User> listUserAccessor; 

또한 열 이름을 다시 한 번 확인 ... 난 당신이 실제로 DB에 ahve 무엇을 다음 다른 넣어 뭔가가있을 수 있습니다.

+0

여전히 작동하지 않고 대신 알 수없는 테이블의 일부 오류를 제공하고 테이블에 조인한다. 존재하지 않는다 –

+1

mappedBy를 지정하면 단방향이 아닌 양방향이됩니다. '다른'쪽에 지정된 매핑을 사용하여 복제하려는 경우 mappedBy – Chris

+0

을 추가하십시오. 양방향으로 선언하는 다른 방법의 예를 수정하십시오. 오늘은 휴식이 필요하다고 생각합니다. –