hibernate сопоставление один ко многим с аннотациями - получение одинаковых значений в списке

Я связываю таблицу пользователей с доступом к приложению. Здесь один Пользователь может иметь доступ ко многим приложениям. Я успешно выполнил сопоставление с приведенным ниже фрагментом кода.

Пользовательский объект сущности:

@Entity
@Table(name = "USER_TBL", uniqueConstraints = { @UniqueConstraint(columnNames = "USER_NAME") })
public class User implements Serializable {

.....
        @Id
    @GeneratedValue
    @Column(name = "USER_ID", unique = true, nullable = false)
    private Integer userId;


    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    private List<UserAppAssociation> userAssociatedApplications = new ArrayList<UserAppAssociation>();

    Getter and setter for userAssociatedApplications

}

Объект доступа к приложению:

@Entity
@Table(name="APPLICATION_ASSOC_TBL")
public class UserAppAssociation implements Serializable{

    @Id
    @Column(name="user_id", unique=true, nullable=false)
    private Integer userId;

    @Column(name = "application_id")
    private Integer appId;

    @Column(name = "user_type_id")
    private Integer userTypeId;
    ...
    @ManyToOne
    @JoinColumn(name="USER_ID",insertable=false,updatable=false)
    private User user;

    ..
    getters and setters

}

Проблема:

I am getting the same values in the Application List ('userAssociatedApplications'). Though i have different values in the application access table, I get the same values in the list. The first row value is repeated in the list.

DB:

I have 'User' table and the mapping is with application access 

Таблица пользователей: столбцы USER_TBL user_id имя телефон

Таблица доступа к приложениям: APPLICATION_ASSOC_TBL

Столбцы User_id application_id и User_type

Примечание. В этой таблице нет первичного ключа.

Пример данных: User_id application_id User_type 1 1 1 1 2 1 1 3 1

Проблема: я получаю первое значение 1,1,1 в списке трижды. Ожидается: список должен содержать 3 разных значения.

Пожалуйста, помогите. Я не уверен, пропустил ли я что-нибудь в отображении аннотаций.


person Saranya    schedule 06.04.2016    source источник
comment
какие данные у вас есть в таблицах пользователей и приложений?   -  person Deendayal Garg    schedule 06.04.2016
comment
@DeendayalGarg - Как я уже упоминал, в USER_TBL у меня есть user_id, имя, телефон в виде столбцов с такими данными, как 1, saranya, 232323. В APPLICATION_ASSOC_TBL у меня есть 3 столбца User_id application_id и User_type с 2 строками 1, 1, 1 и 1 ,2,1   -  person Saranya    schedule 07.04.2016


Ответы (1)


Похоже проблема в этом

@Id
@Column(name="user_id", unique=true, nullable=false)
private Integer userId;

@ManyToOne
@JoinColumn(name="USER_ID",insertable=false,updatable=false)
private User user;

Попробуйте использовать это сопоставление. Пожалуйста, используйте это как руководство по именам и не используйте ненужные аннотации.

@Entity
@Table(name = "xxx_users", uniqueConstraints = { @UniqueConstraint(columnNames = "f_name") })
public class User {

    @Id
    @GeneratedValue
    @Column(name = "f_id")
    private Integer id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    private List<UserAppAssociation> applications = new ArrayList<UserAppAssociation>();

}


@Entity
@Table(name="xxx_user_applications")
public class UserAppAssociation {

    @Id
    @GeneratedValue
    @Column(name = "f_id")
    private Integer id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="fk_user")
    private User user;

}
person v.ladynev    schedule 06.04.2016
comment
Спасибо за ваш ответ. @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name=fk_user) частный пользователь пользователь; Пробовал по вашим аннотациям, безуспешно. Какое здесь имя столбца fk_user. Я пробовал использовать user_id в качестве имени столбца соединения. - person Saranya; 07.04.2016
comment
@Saranya Это не проблема аннотаций! Вы не должны использовать Integer userId в UserAppAssociation. Просто удалите все поля и uniqueConstraints, кроме тех, что из моего примера, и протестируйте. Вы можете использовать user_id вместо fk_user, конечно, это просто столбец. Но не добавляйте два столбца (user_id, USER_ID) для одного и того же! - person v.ladynev; 07.04.2016
comment
@Saranya Попробуйте воссоздать схему БД и заполнить данные, потому что вам нужно сгенерировать идентификаторы для UserAppAssociation. - person v.ladynev; 07.04.2016
comment
Позвольте мне попытаться воссоздать схему и проверить. Но в то же время вы имеете в виду, что у меня должен быть первичный ключ для таблицы APPLICATION_ASSOC_TBL? В настоящее время у меня нет первичного ключа для этой таблицы - person Saranya; 07.04.2016