Почему Hibernate выбрасывает "идентификатор не указан"? - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь вставить данные в базу данных Oracle, к которой я прикрепил скриншот.Существует класс сущности, созданный внутри пакета модели, который содержит все столбцы и таблицу.Существует столбец идентификатора, который автоматически увеличивается в прикрепленных деталях базы данных.Основная проблема заключается в автоматическом увеличении данных для столбца идентификатора с использованием @GeneratedValue(strategy = GenerationType.IDENTITY), что не дает мне идентификатора, указанного для этой сущности.Таким образом, для этого был создан объект этого класса сущностей, и с помощью метода сохранения я пытался сохранить его, но из-за ошибки для этого идентификатора он не сохраняется.

Это мой класс сущности, которыйсодержит таблицы и столбцы

package com.sid.demo.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
//import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.springframework.data.annotation.Id;

@Table(name="user_registration")  //this is a table present in my oracle database
@Entity
public class hindalco_model 
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //this is where problem exists
    @Column(name="user_id",updatable=false,nullable=false)
    private Long user_id;  //this is column a present in oracle database which is auto incremented

    @Column(name="user_name")
    private String user_name;

    @Column(name="email")
    private String email;

    @Column(name="password")
    private String password;

    public Long getUser_id() {
        return user_id;
    }

    public void setUser_id(Long user_id) {
        this.user_id = user_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "hindalco_model [user_id=" + user_id + ", user_name=" + user_name + ", email=" + email + ", password="
                + password + "]";
    }       
}

Это мой класс контроллера, в котором я создал объект указанного выше класса сущности

package com.sid.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.sid.demo.model.hindalco_model;
import com.sid.demo.repository.hindalco_repository;

@RestController
@RequestMapping("/hindalco_user")
public class hindalco_controller 
{
    @Autowired
    hindalco_repository hindalco_repo;

    @RequestMapping(value="/user_registration",method = RequestMethod.GET, produces = {"application/json"})
    public hindalco_model user_registration(hindalco_model hindalco)
    {
        hindalco_repo.save(hindalco);
         return hindalco;
    }

}

//это мой класс репозитория, через который я вызываю метод save, который принимает объект класса сущности в качестве аргумента

package com.sid.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import com.sid.demo.model.hindalco_model;

public interface hindalco_repository extends JpaRepository<hindalco_model,Integer>
{

}

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

/*create sequence friend_auto start with 1 increment by 1;*/

create or replace trigger user_id
before insert on user_registration
for each row
begin
:new.user_id :=user_id.nextval;
end;

Прикрепленный скриншот базы данных с подробностями всех столбцов введите описание изображения здесь

Ниже приведены ошибки, которые генерируются при компиляции

2019-02-27 18:30:09.076  INFO 7412 --- [           main] org.apache.jasper.servlet.TldScanner     : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2019-02-27 18:30:09.079  INFO 7412 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-02-27 18:30:09.080  INFO 7412 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1603 ms
2019-02-27 18:30:09.293  INFO 7412 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-02-27 18:30:09.295  WARN 7412 --- [           main] com.zaxxer.hikari.util.DriverDataSource  : Registered driver with driverClassName=oracle.jdbc.driver.OracleDriver was not found, trying direct instantiation.
2019-02-27 18:30:09.463  INFO 7412 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2019-02-27 18:30:09.529  INFO 7412 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
2019-02-27 18:30:09.700  INFO 7412 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.4.0.Final}
2019-02-27 18:30:09.701  INFO 7412 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2019-02-27 18:30:09.850  INFO 7412 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2019-02-27 18:30:10.037  INFO 7412 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect
2019-02-27 18:30:10.254  INFO 7412 --- [           main] org.hibernate.type.BasicTypeRegistry     : HHH000270: Type registration [byte[]] overrides previous : org.hibernate.type.BinaryType@59696551
2019-02-27 18:30:10.254  INFO 7412 --- [           main] org.hibernate.type.BasicTypeRegistry     : HHH000270: Type registration [[B] overrides previous : org.hibernate.type.BinaryType@59696551
2019-02-27 18:30:10.255  INFO 7412 --- [           main] org.hibernate.type.BasicTypeRegistry     : HHH000270: Type registration [Byte[]] overrides previous : org.hibernate.type.WrapperBinaryType@17273273
2019-02-27 18:30:10.255  INFO 7412 --- [           main] org.hibernate.type.BasicTypeRegistry     : HHH000270: Type registration [[Ljava.lang.Byte;] overrides previous : org.hibernate.type.WrapperBinaryType@17273273
2019-02-27 18:30:10.313  WARN 7412 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.sid.demo.model.hindalco_model
2019-02-27 18:30:10.313  INFO 7412 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2019-02-27 18:30:10.327  INFO 7412 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2019-02-27 18:30:10.330  INFO 7412 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2019-02-27 18:30:10.345  INFO 7412 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-02-27 18:30:10.355 ERROR 7412 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.sid.demo.model.hindalco_model
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
    at com.sid.demo.SpringBootJpaApplication.main(SpringBootJpaApplication.java:10) [classes/:na]
Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.sid.demo.model.hindalco_model
    at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:266) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final]
    at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:211) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final]
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:785) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final]
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:250) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:231) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:274) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:903) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:934) ~[hibernate-core-5.4.0.Final.jar:5.4.0.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) ~[spring-orm-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) ~[spring-orm-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) ~[spring-orm-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1821) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    ... 16 common frames omitted

Точная ошибка ниже единицы

org.springframework.beans.factory.BeanCreationException: Ошибкасоздание компонента с именем entityManagerFactory, определенным в ресурсе пути к классу [org / springframework / boot / autoconfigure / orm / jpa / HibernateJpaConfiguration.class]: сбой вызова метода init;вложенное исключение: org.hibernate.AnnotationException: для сущности не указан идентификатор: com.sid.demo.model.hindalco_model

1 Ответ

0 голосов
/ 27 февраля 2019

В hindalco_model вы аннотировали user_id с org.springframework.data.annotation.Id, но оно должно быть javax.persistance.Id.

Измените импорт в строке 9 с помощью

import javax.persistance.Id;

Также имейте в виду, что выВы определили свой идентификатор монеля как Long, в то время как в вашем hindalco_repository вы задали его как Integer.

Измените JpaRepository<hindalco_model,Integer> на JpaRepository<hindalco_model, Long>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...