Loading...
IVANMARINOV1975 avatar IVANMARINOV1975 19 Точки

Помощ:SQLSyntaxErrorException: ORA-00942: table or view does not exist

Здравейте,

Authontication- на ми гърми със следната грешка:Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

Това става когато UserDao се опитва да вземе от таблиците username и password,за да създаде обекта User, който после AuthonticationManager да ползва за сравнение на данните.Гледах ги 5 часа.Четох и в нета и нищо не става.При debug сe вижда че при  jpgl заявката в UserDao гърми когато се опитва да вземе getResultList();

Импортнах и проекта от workshopa и той е така.А при проекта за SpringJpaUniClass работят методите за studentRegister и прави връзка с базата данни.

Ако може някой да даде идеи ще съм благодарен!

Тагове:
0
Java Web Development
milkopg avatar milkopg 47 Точки

Здравей, трябва да дадеш повече детайли за анотациите които си използвал в модела, за заявката която изпълняваш, както и актуалните таблици в базата ти данни.

 

Като начало можеш да пуснеш дебъгера на hibernate - в log4j.xml файла

просто добави

<logger name="org.hibernate.SQL">
        <level value="DEBUG" />
    </logger>

И конзолата ще ти бълва дебъг информация за SQL-a, ако не помогне напиши информацията, която ти написах или направо целия проект и ще видим къде е проблема. По принцип Syntax Error в Oracle ти означава грешна SQL заявка или опит за използване на резервирана дума.

0
IVANMARINOV1975 avatar IVANMARINOV1975 19 Точки

Благодаря!Като се прибера в 18ч от работа ще пробвам и веднага ще пиша.

0
IVANMARINOV1975 avatar IVANMARINOV1975 19 Точки

 

Сега пък Authontication-a се оправи и е ок но гърми заявката към таблицата Book.Доколкото виждам дава invalid column ама не виждам такова нещо:

INFO: Server startup in 17683 ms
DEBUG: org.hibernate.SQL - select autouser0_.ID as ID1_0_, autouser0_.CREATED_BY as CREATED_2_0_, autouser0_.PASSWORD as PASSWORD3_0_, autouser0_.STATUS as STATUS4_0_, autouser0_.USERNAME as USERNAME5_0_ from AUTO_USER autouser0_ where autouser0_.USERNAME in (?)
DEBUG: org.hibernate.SQL - select authoritie0_.USER_ID as USER_ID1_3_0_, authoritie0_.AUTHORITY_ID as AUTHORIT2_3_0_, authority1_.ID as ID1_2_1_, authority1_.AUTHORITY as AUTHORIT2_2_1_ from USER_AUTHORITY authoritie0_ inner join NM_AUTHORITY authority1_ on authoritie0_.AUTHORITY_ID=authority1_.ID where authoritie0_.USER_ID=?
DEBUG: org.hibernate.SQL - select autouser0_.ID as ID1_0_, autouser0_.CREATED_BY as CREATED_2_0_, autouser0_.PASSWORD as PASSWORD3_0_, autouser0_.STATUS as STATUS4_0_, autouser0_.USERNAME as USERNAME5_0_ from AUTO_USER autouser0_ where 1=1 and 1=1
DEBUG: org.hibernate.SQL - select authoritie0_.USER_ID as USER_ID1_3_0_, authoritie0_.AUTHORITY_ID as AUTHORIT2_3_0_, authority1_.ID as ID1_2_1_, authority1_.AUTHORITY as AUTHORIT2_2_1_ from USER_AUTHORITY authoritie0_ inner join NM_AUTHORITY authority1_ on authoritie0_.AUTHORITY_ID=authority1_.ID where authoritie0_.USER_ID=?
DEBUG: org.hibernate.SQL - select authoritie0_.USER_ID as USER_ID1_3_0_, authoritie0_.AUTHORITY_ID as AUTHORIT2_3_0_, authority1_.ID as ID1_2_1_, authority1_.AUTHORITY as AUTHORIT2_2_1_ from USER_AUTHORITY authoritie0_ inner join NM_AUTHORITY authority1_ on authoritie0_.AUTHORITY_ID=authority1_.ID where authoritie0_.USER_ID=?
java.sql.SQLException: Invalid column name
 at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:4158)
 at oracle.jdbc.driver.InsensitiveScrollableResultSet.findColumn(InsensitiveScrollableResultSet.java:300)
 at oracle.jdbc.driver.GeneratedResultSet.getInt(GeneratedResultSet.java:1350)
 at bg.jwd.cars.dao.book.BookDaoImpl.getBooks(BookDaoImpl.java:67)
 at bg.jwd.cars.service.book.BookServiceImpl.getBooks(BookServiceImpl.java:19)
 at bg.jwd.cars.controller.book.BookController.getStudents(BookController.java:28)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)

 Пускам таблицата ,entity-to и заявката.Благодаря предварително ако някой открие нещо.

@Entity
 @Table(name = "BOOK")
 public class Book  {
  @Id
  @Column(name = "ID")
  private long id;
  @Column(name = "NAME")
  private String name;

            @Column(name = "AUTHOR")
  private String author;

  @Column(name = "YEARPUBLISHING")
  private int yearpublishing;

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

  public int getYearPublishing() {
   return yearpublishing;
  }

  public void setYearPublishing(int yearPublishing) {
   this.yearpublishing = yearPublishing;
  }

 


  CREATE TABLE "BOOK" ("ID" NUMBER, "NAME" VARCHAR2(20), "AUTHOR" VARCHAR2(20), "YEARPUBLISHING" NUMBER)


ALTER TABLE "BOOK" ADD PRIMARY KEY ("ID") ENABLE

Insert into BOOK (ID,NAME,AUTHOR,YEARPUBLISHING) values (1,'sega','ivan',1997);
Insert into BOOK (ID,NAME,AUTHOR,YEARPUBLISHING) values (2,'utre','pesho',2000);

@Repository
public class BookDaoImpl implements BookDao{
 
  public static final String URL = "jdbc:oracle:thin:@localhost:1521:XE";
  public static final String USERNAME = "IVANM";
  public static final String PASSWORD = "IVANM";
 
  static {
  try {
  Class.forName("oracle.jdbc.OracleDriver");
  } catch (ClassNotFoundException e1) {
  e1.printStackTrace();
  }
  }
 @PersistenceContext
 private EntityManager entityManager;
 
 
 public List<Book> getBooks() {

   List<Book> books = new ArrayList<>();
  
   try (Connection conn = DriverManager.getConnection(URL, USERNAME,
   PASSWORD);
   Statement stmt = conn.createStatement();) {
  
   String sql = "SELECT * FROM BOOK";
  
   ResultSet result = stmt.executeQuery(sql);
  
   while (result.next()) {
   Book book = new Book();
  
   book.setId(result.getLong("id"));
   book.setName(result.getString("name"));
   book.setAuthor(result.getString("author"));
   book.setYearPublishing(result.getInt("yearpublishing"));
   books.add(book);
   }
  
   } catch (SQLException e) {
   e.printStackTrace();
   return null;
   }
  
   return books;
 }

 
   
  

 
    }

0
milkopg avatar milkopg 47 Точки

Здрасти,

в заданието е посочено, че трябва да използваме JPA/Hibernate , а ти си посочил JPA анотациите, но пък използваш директно SQL заявки в чист SQL.

Според мен тази заявка би трябвало да изглежда така с JPA

@Override
    public List<Book> getAllBooks() {
        TypedQuery<Book> q;
        
        try {
            q = em.createQuery("SELECT o FROM Booko ORDER BY o.id", Book.class);
            return q.getResultList();
        } catch (Exception e) {
            systemlog.error("Cannot getAllBook: " + e.getMessage()); // tova e logger
            return null;
        }
    }
Мисля, че омесването на 2 типа извличане на данни JDBC и JPA + използването на анотации е причината за тази грешка.

Използвай само 1 тип извличане на данни, а относно конкретната грешка грешка на този ред at bg.jwd.cars.dao.book.BookDaoImpl.getBooks(BookDaoImpl.java:67) - виж кое пропърти и коя колона е,  още в Entity-то са ти с големи букви имената на колоните а в resultSet ги извикваш с малки т.е. пробвай book.setId(result.getLong("ID"));

1
IVANMARINOV1975 avatar IVANMARINOV1975 19 Точки

Пробвал съм  и с JPQL  не става.Пробвах всички варианти от лекцията и гърми.Иначе пробвах и с HQL но като сложих Autowired SessionFactory и замаркирах EntityManager  пък изобщо не тръгна програмата и в конзолата ми изписа че не може да създаде този Autowired Bean.Трябва ли някакви настройки да вкарам за този AutowiredBean?И има ли значение в ORACLE как създавам таблици и  колони-големи малки букви.А интересното е ,че таблиците за USER Authontication-a ги намира и работи .Мерси много за коментара!Ако не те притеснявам ще питам пак :)

 

0
milkopg avatar milkopg 47 Точки

Здрасти, може да харесаш някой мой коментар, ако прецениш, че са ти от полза!

ако си настроил правилно JPA/Hibernate в конзолата не трябва да грешки, а относно @Autowired анотазиите, класовете които извикваш с Autowired трябва да са декларирани предварително със @Service анотация ако ти е  Service клас, или с @Repository ако ти е Dao клас, предпалагам  @Autowired за User ти работи защото имаш анотация на този клас, на другия няма

1
deyan.zhekov avatar deyan.zhekov 159 Точки

Здравей,

моля те не paste-вай толкова голям фрагмент от кода директно във форума. Ползваш някой сайт и дай само линк.

Другото, което следва да направиш е да дадеш и грешката, както и фрагмента код, на който ти казва че се появява. Ако аз ти кажа, че приложението не работи, ще успееш ли по тази информация да ми помогнеш?

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.