Помощ: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 и прави връзка с базата данни.
Ако може някой да даде идеи ще съм благодарен!
Благодаря!Като се прибера в 18ч от работа ще пробвам и веднага ще пиша.
Сега пък 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;
}
}
Здрасти,
в заданието е посочено, че трябва да използваме 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"));