2012-10-09 2 views
2

Я ищу лучший способ сопоставить несколько строк в одной таблице в единый объект. В таблице базы данных у меня показано ниже:Отображение нескольких строк из одной базы данных в один объект

principal_id permission target 
12312313  PERM1   1000 
12312313  PERM2   1000 
12312313  PERM2   1002 

В идеале я хотел бы, чтобы отобразить содержимое этой таблицы в моей Principal @Entity как поле следующим образом:

@Entity 
... 
public class Principal { 
    @Id 
    private long principalId; 

    ... 

    private Map<String, List<Long>> permissionMap; 

} 

Что является лучшим способом сделать это?

ответ

-1

Я хотел бы предложить следующую структуру:

@Entity 
... 
public class Principal { 

    @Id 
    private long principalId; 
    /** Other properties **/ 
    @OneToMany 
    private Set<Permission> permissions; 
.... 
} 

@Entity 
@IdClass(PermissionId.class) 
public class Permission { 
    @Id 
    private String permission; 
    @Id 
    private Long target 

    public static class PermissionId implements Serializable { 
     private String permission; 
     private Long target; 
     /** setters/getters hashcode and equals goes here **/ 
    } 
} 
+0

Не работает. Существует только одна таблица, но вы используете два объекта. – Yang

3

Я не знаю способа сделать именно то, что вы хотите. Ближайший я могу получить это:

@Embeddable 
public class Permission { 
    private String permission; 
    private int target; 
} 

@ElementCollection 
@CollectionTable(name="foo", joinColumns = @JoinColumn(name = "principal_id")) 
private Set<Permission> permissions; 

Если у вас только одно разрешение на каждую цель, то вы можете использовать карту:

@ElementCollection 
@CollectionTable(name="foo", joinColumns = @JoinColumn(name = "principal_id")) 
@MapKeyColumn(name="permission") 
@Column(name="target") 
private Map<String, Integer> permissions; 

К сожалению, я не думаю, что есть способ сделать это для отображения, содержащего сборники.

+0

Том, не могли бы вы помочь мне взглянуть на этот вопрос? http://stackoverflow.com/questions/17244804/jpa-mapping-multi-rows-with-elementcollection Я пытаюсь 'ElementCollection', но не могу заставить его работать. благодаря – Yang

Смежные вопросы