Я получаю сообщение об ошибке: Ошибка вызова метода инициализации; вложенным исключением является org.hibernate.MappingException: повторяющийся столбец в отображении для объекта

Я получаю сообщение об ошибке: Ошибка вызова метода инициализации; вложенным исключением является org.hibernate.MappingException: повторяющийся столбец в сопоставлении для объекта: столбец com.messagemanager.domain.User: id (должен быть сопоставлен с вставкой = "false" update = "false")

Есть мои Сущности:

@MappedSuperclass
public abstract class BaseEntity{

    @Id
    @Column(nullable = false, unique = true, name = "id", insertable = false, updatable = false)
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Long id;

    public Long getId() {
        return id;
    }   

    public void setId(Long id) {
        this.id = id;
    }
}


@Entity
@Table(name = "User")
public class User  extends BaseEntity implements Serializable{
    @Column(name = UserFieldsKey.ID, length = 50, nullable = false)
    private String name;

    @Column(updatable = false, insertable = false)
    @Transient
    private List<Message> listMessage = new ArrayList<>();

    public static class UserFieldsKey{
        public static final String NAME = "name";
    }

    public User() {
    }

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "user")
    public List<Message> getListMessage() {
        return listMessage;
    }

    public void setListMessage(List<Message> listMessage) {
        this.listMessage = listMessage;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


@Entity
@Table(name = "Message")
public class Message extends BaseEntity implements Serializable{
    @Column(name = MessageFieldsKey.MESSAGE, length = 500, nullable = false)
    private String message;

    @ManyToOne(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name="user")
    private User user;

    @Column(name = "id_user")
    private Long id_user;

    public Long getId_user() {
        return id_user;
    }

    public void setId_user(Long id_user) {
        this.id_user = id_user;
    }

    public static class MessageFieldsKey{
        public static final String MESSAGE = "mes";
    }

    public String getMessage() {
        return message;
    }

    public User getUser() {
        return user;
    }

    public Message() {
    }

    public Message(String message, User user) {
        this.message = message;
        this.user = user;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

Любые идеи?

P.S. большое спасибо!


person Dmitriy S    schedule 05.04.2017    source источник
comment
каково значение UserFieldsKey.ID?   -  person Bhargav Patel    schedule 05.04.2017
comment
@DmitriyS была проблема, на которую я пытался ответить?   -  person Eugene    schedule 08.04.2017
comment
Пост закрыт. Всем спасибо!   -  person Dmitriy S    schedule 10.04.2017


Ответы (2)


Похоже, это потому, что у вас есть это:

@ManyToOne(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name="user")
private User user;

который будет отображаться на User.id; а в Message у вас уже есть id, так как вы расширяете BaseEntity

person Eugene    schedule 05.04.2017

Проблема решена) Я ошибся в отношениях между таблицами.

person Dmitriy S    schedule 13.04.2017