I’v got a problem in my Spring Boot with H2 project. I got a get method for listing elements from the SQL table and the SQL command working. In the H2 database I can execute and see the results but I can’t get the values from Postman. My GET post went wrong. My SQL codes are also in here.
I also uploaded my project to github. If you want to see all classes Here is my GitHub project link
UrunEntity class
x
@Entity
@Table(name = "urunler")
public class UrunEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "urun_id")
private int urunId;
@Column(name = "hayvan_kupe_no")
private int hayvanKupeNo;
@Column(name = "hayvan_adi")
private String hayvanAdi;
@Column(name = "dogum_sekli")
private String dogumSekli;
@Column(name = "hayvan_resmi")
private String hayvanResmi;
@Column(name = "hayvan_cinsiyet")
private String hayvanCinsiyet;
@Column(name = "hayvan_irki")
private String hayvanIrki;
@Column(name = "hayvan_anneAdi")
private String hayvanAnneAdi;
@Column(name = "dogum_tarihi")
private String dogumTarihi;
@Column(name = "dogum_agirligi")
private Double dogumAgirligi;
@Column(name = "tohuma_hazir")
private Boolean tohumaHazir;
@Column(name = "sut_miktari")
private Double sutMiktari;
@Column(name = "sut_tarihi")
private String sutTarihi;
@Column(name = "urun_tutar")
private Double urunTutar;
@Column(name = "user_id")
private Integer userId;
//getters and setters after that
Here is my UrunRepository
@Query(value="SELECT DOGUM_AGIRLIGI, DOGUM_SEKLI, DOGUM_TARIHI, HAYVAN_ADI, HAYVAN_ANNE_ADI, HAYVAN_CINSIYET, HAYVAN_IRKI, URUN_TUTAR FROM URUNLER d " +
"INNER JOIN kullanicilar k on d.user_id = k.user_id " +
"WHERE k.user_id=:userId AND HAYVAN_ADI IS NOT NULL",
nativeQuery=true)
List<UrunEntity> findHayvanAll(@Param("userId") String userId);
Here is the error code at backend
> 2021-01-12 17:58:39.357 WARN 19652 --- [nio-6161-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 42122, SQLState: 42S22
2021-01-12 17:58:39.357 ERROR 19652 --- [nio-6161-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper : Column "urun_id" not found [42122-200]
2021-01-12 17:58:39.374 ERROR 19652 --- [nio-6161-exec-5] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/invoiceControl] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL [SELECT DOGUM_AGIRLIGI, DOGUM_SEKLI, DOGUM_TARIHI, HAYVAN_ADI, HAYVAN_ANNE_ADI, HAYVAN_CINSIYET, HAYVAN_IRKI, URUN_TUTAR FROM URUNLER d INNER JOIN kullanicilar k on d.user_id = k.user_id WHERE k.user_id=? AND HAYVAN_ADI IS NOT NULL]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query] with root cause
org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "urun_id" not found [42122-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:453) ~[h2-1.4.200.jar:1.4.200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200]
at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200]
at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200]
at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3169) ~[h2-1.4.200.jar:1.4.200]
at org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:3268) ~[h2-1.4.200.jar:1.4.200]
at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:352) ~[h2-1.4.200.jar:1.4.200]
Here is the error from Postman:
"timestamp": "2021-01-12T14:30:50.458+0000",
"status": 500,
"error": "Internal Server Error",
"message": "could not execute query; SQL [SELECT SUT_MIKTARI, SUT_TARIHI, URUN_TUTAR FROM URUNLER d INNER JOIN kullanicilar k on d.user_id = k.user_id WHERE k.user_id=? AND SUT_MIKTARI IS NOT NULL]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query",
"trace": "org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL [SELECT SUT_MIKTARI, SUT_TARIHI, URUN_TUTAR FROM URUNLER d INNER JOIN kullanicilar k on d.user_id = k.user_id WHERE k.user_id=? AND SUT_MIKTARI IS NOT NULL]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute queryrntat org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:281)rntat org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255)rntat org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:528)rntat org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)rntat org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)rntat org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153)rntat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)rntat org.springframework.data.jpa.repository.support
KullanicilarEntity class
@Entity
@Table(name = "kullanicilar")
public class KullaniciEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private long userId;
@Column(name = "email")
private String email;
@Column(name = "kullanici_sifre")
private String kullaniciSifre;
@Column(name = "kullanici_adi")
private String kullaniciAdi;
@Column(name = "kullanici_soyadi")
private String kullaniciSoyadi;
@Column(name = "telefon_no")
private String telefonNo;
@Column(name = "enabled")
private boolean enabled;
@Column(name = "username")
private String username;
My Resource(endpoints) interface
@GetMapping(path = "/getSut")
public ResponseEntity<List<UrunEntity>> getSut(@RequestParam("userId") String userId) {
List<UrunEntity> urunEntities = ccAppService.findSutAll(userId);
return new ResponseEntity(urunEntities, HttpStatus.OK);
}
Advertisement
Answer
I create a new model class named HayvanDto and I created all of the UrunEntity entites inside of this.
public class HayvanDto {
private Double dogumAgirligi;
private String dogumSekli;
private String dogumTarihi;
private String hayvanAdi;
private String hayvanAnneAdi;
private String hayvanCinsiyet;
private String hayvanIrki;
private String hayvanResmi;
private Boolean tohumaHazir;
private Double urunTutar;
After that, in my implementation class, I wrote this code.
@Override
public List<HayvanDto> findHayvanAll(Integer userId) {
List<UrunEntity> urunEntities = urunRepository.findHayvanAll(userId);
List<HayvanDto> hayvanDtos = new ArrayList<>();
for (UrunEntity urunEntity : urunEntities) {
HayvanDto hayvanDto = new HayvanDto();
hayvanDto.setHayvanAdi(urunEntity.getHayvanAdi());
hayvanDto.setHayvanIrki(urunEntity.getHayvanIrki());
hayvanDto.setHayvanResmi(urunEntity.getHayvanResmi());
hayvanDto.setHayvanCinsiyet(urunEntity.getHayvanCinsiyet());
hayvanDto.setHayvanAnneAdi(urunEntity.getHayvanAnneAdi());
hayvanDto.setDogumAgirligi(urunEntity.getDogumAgirligi());
hayvanDto.setDogumSekli(urunEntity.getDogumSekli());
hayvanDto.setUrunTutar(urunEntity.getUrunTutar());
hayvanDto.setTohumaHazir(urunEntity.getTohumaHazir());
hayvanDtos.add(hayvanDto);
}
return hayvanDtos;
}
Then it worked. Thanks for the answers.