Подтвердить что ты не робот

Org.Hibernate.AnnotationException: идентификатор не указан для объекта. У меня нет идентификатора в моей таблице.

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

Что мне делать? Я попытался помещать аннотацию @id в случайный столбец, и это сработало, но я не знаю, приведет ли это к дальнейшим проблемам позже. что я могу сделать?

Мой класс

@Entity
@Table(name="my_table")
public class TheTable {
@Column (name="name", nullable=false)
    private String name;

    @Id <--- I just put this id in this random column but this column should not be a id column
    @Column (name="anyfield", nullable=false)
    private String anyfield;
}
4b9b3361

Ответ 1

У меня была эта проблема и я использовал неправильный импорт для @id:

Убедитесь, что это:

import javax.persistence.Id;

и не:

import org.springframework.data.annotation.Id;

Ответ 2

Hibernate является промежуточным для адресных баз данных SQL, и поскольку каждая строка в базе данных sql должна иметь уникальный идентификатор, спящий режим заставляет вас определять его.

Вот пример сгенерированного первичного ключа, который будет добавлен автоматически (не забудьте getter и setter)

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

Так как дубликаты не разрешены, выбор произвольного столбца не подходит.

Ответ 3

JPA (а не Hibernate как таковой) требует, чтобы все объекты были идентифицированы однозначно. К сожалению, это не позволяет делать то, что вы хотите.

JDO, с другой стороны, позволяет устойчивому классу сопоставлять таблицу без PK и обрабатывать то, что вам нужно.

Ответ 4

Не для него Hibernate - реляционный datamodel требуется primary keys. Итак, у вас есть сломанная модель данных, потому что без первичного ключа она не может быть реляционной, и поэтому ее трудно использовать с ORM.

для получения дополнительной информации, здесь

Ответ 5

You can solve this using embedded id 

Пример:

@Entity
@Table(name = "my_table")
public class MyTable implements Serializable {

    private static final long serialVersionUID = 1L;

    // @Id
    @Column(name = "id", insertable = false, updatable = false)
    private String id;

    @EmbeddedId
    MYtablePK pk;

    public MYtablePK getPk() {
        return pk;
    }

    public void setPk(MYtablePK pk) {
        this.pk = pk;
    }

    @Column(name = "my_table_FirstName", insertable = false, updatable = false)
    private String name;

    @Transient
    public String getName() {
        return pk.getName();
    }

    public void setName(String mrn) {
        pk.setName(name);
    }
    @Transient
        public String getSeverity() {
        return pk.getSeverity();
    }
    public void setSeverity(String severity) {
        pk.setName(name);
    }

    public String getId() {
        return pk.getId();
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return pk.getName();
    }
    public void setName(String name) {
        tpk.setName(name);
    }
}

@Embeddable
public class MyTablePK implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = -1257821517891392898L;
    @Column(name = "id")
    private String id;
    @Column(name = "name")
    private String name;
    @Column(name = "dob")
    private Date dob;
    public Date getdob() {
        return dob;
    }
    public void setdob(Date dob) {
        this.pk.setdob(dob);
    }
    @Column(name = "severity")
    private String severity;
    public String getSeverity() {
        return severity;
    }
    public void setSeverity(String severity) {
        this.severity = severity;
    }

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name

Ответ 6

Также была проблема. Проблема заключалась в неправильном вводе аннотации @Id. Поэтому, пожалуйста, убедитесь, что вы не только аннотируете идентификатор, но и выполняете его с помощью javax.persistence.Id.

Ответ 7

Убедитесь, что для каждой сущности определено ограничение p.k, и проверьте оператор импорта для Id Annotation. Проверьте операцию импорта:

import javax.persistence.Id;
@Id
@Column(name="id")
@GeneratedValue 
private int id;