org.hibernate.id.IdentifierGenerationException: идентификаторы для этого класса должны быть назначены вручную перед вызовом save(): com.app.entites.LDetails

Я много раз пытался вставить значение идентификатора в свою таблицу, используя приведенный ниже код, но он всегда выдавал org.hibernate.id.IdentifierGenerationException: идентификаторы для этого класса должны быть назначены вручную перед вызовом save(): com.app.entites.LDetails

ниже приведен код в классе сущностей

@Column(name="LID")
@GenericGenerator(name="generatedId", strategy="com.app.common.IdGenerator")
@GeneratedValue(generator="generatedId", strategy=GenerationType.SEQUENCE)
@NotNull
private String lId;

Я реализовал генератор идентификаторов, используя IdentifierGenerator, как показано ниже.

public class IdGenerator implements IdentifierGenerator{

private static String id;

@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
    Connection con = session.connection();
    try {
        Statement statement = con.createStatement();
        ResultSet rs = statement.executeQuery("select count(ID) from L_DETAILS");
        if(rs.next()) {
            int i = rs.getInt(1)+1;
            this.id="ll"+i;
            System.out.println("generated id is "+id);
            return "l"+i;
        }
    }catch(SQLException e) {
        e.printStackTrace();
    }
    return null;
}

}


person Tharun Masarp    schedule 11.02.2019    source источник
comment
проверьте stackoverflow.com/questions/10997494/   -  person Ponni    schedule 11.02.2019


Ответы (2)


Вы забыли добавить аннотацию @Id сверху. Тот факт, что вы добавили аннотацию @GeneratedValue, не означает, что вы можете обойтись без аннотации @Id. Вам все еще нужно это.

person Alexander Petrov    schedule 11.02.2019
comment
Спасибо, но я решил это, это не проблема с вышеуказанным. Я пытался вставить составной ключ в обычную вставку, что неверно! Я должен использовать встраиваемую аннотацию в классе генератора составных ключей... В любом случае, спасибо, Бадди! - person Tharun Masarp; 12.02.2019

Используйте следующий подход для генерации автоматического идентификатора первичного ключа в вашем классе сущностей: -

 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Entity;

        @Entity
        @Table(name = "your_table_name")
        public class YourEntityClass{

            @Id
            @GeneratedValue(strategy = GenerationType.AUTO)
            @Column(name = "id")
            private long id;

            //other column names

           // setter & getter methods

        }

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

person Sumit    schedule 11.02.2019
comment
Спасибо, я пытался получить кастомный, я бы не автоматически идентифицировал - person Tharun Masarp; 12.02.2019