Java 检查和删除数据库中的2个值时发生Hibernate JPA错误
检查特定表中是否存在值以及是否存在要删除的内容时出现问题 我想检查圣诞老人的名字或接受参与者的名字是否等于奥斯卡的价值 并检查是否santa_last_name或Receiving_participant_last_name等于=Martinez 使用:Java8和MySql 8.0 我的数据库表是:Java 检查和删除数据库中的2个值时发生Hibernate JPA错误,java,mysql,sql,hibernate,jpa,Java,Mysql,Sql,Hibernate,Jpa,检查特定表中是否存在值以及是否存在要删除的内容时出现问题 我想检查圣诞老人的名字或接受参与者的名字是否等于奥斯卡的价值 并检查是否santa_last_name或Receiving_participant_last_name等于=Martinez 使用:Java8和MySql 8.0 我的数据库表是: +----+------------+-----------------+---------------------------+--------------------------------+
+----+------------+-----------------+---------------------------+--------------------------------+
| id | santa_name | santa_last_name | reciving_participant_name | reciving_participant_last_name |
+----+------------+-----------------+---------------------------+--------------------------------+
| 2 | Oscar | Martinez | Andy | Bernard |
+----+------------+-----------------+---------------------------+--------------------------------+
我的班级:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="santa_connections")
public class SantaConnections {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="santa_name")
private String santaName;
@Column(name="santa_last_name")
private String santaLastName;
@Column(name="reciving_participant_name")
private String userName;
@Column(name="reciving_participant_last_name")
private String userLastName;
public SantaConnections() {
}
public SantaConnections(String santaName, String santaLastName, String userName, String userLastName) {
super();
this.santaName = santaName;
this.santaLastName = santaLastName;
this.userName = userName;
this.userLastName = userLastName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSantaName() {
return santaName;
}
public void setSantaName(String santaName) {
this.santaName = santaName;
}
public String getSantaLastName() {
return santaLastName;
}
public void setSantaLastName(String santaLastName) {
this.santaLastName = santaLastName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserLastName() {
return userLastName;
}
public void setUserLastName(String userLastName) {
this.userLastName = userLastName;
}
}
和DAO类:
public void deleteFromSantaConnections(String name, String lastName) {
Transaction transaction = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
transaction = session.beginTransaction();
try {
SantaConnections toRemove = (SantaConnections) session.createNativeQuery(
"SELECT * From SantaConnections s WHERE s.santaName = '" + name + "' AND s.santaLastName = '" + lastName + "' OR s.userName = '" + name + "' AND s.userLastName '" + lastName + "' ").getSingleResult();
session.remove(toRemove);
transaction.commit();
} catch (Exception e) {
System.out.println("User " + name + " " + lastName + " is no in other DB");
transaction.rollback();
e.printStackTrace();
}
} catch (Exception e) {
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
}
}
删除时出错:
Hibernate: SELECT * From SantaConnections s WHERE s.santaName = 'Oscar' AND s.santaLastName = 'Martinez' OR s.userName = 'Oscar' AND s.userLastName 'Martinez'
gru 19, 2019 2:22:10 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1064, SQLState: 42000
gru 19, 2019 2:22:10 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Martinez'' at line 1
您刚刚忘记了这一行中
s.userLastName
后面的等号:
SELECT * From SantaConnections s WHERE s.santaName = '" + name + "' AND s.santaLastName = '" + lastName + "' OR s.userName = '" + name + "' AND s.userLastName '" + lastName + "' ").getSingleResult();
应该是:
SELECT * From SantaConnections s WHERE s.santaName = '" + name + "' AND s.santaLastName = '" + lastName + "' OR s.userName = '" + name + "' AND s.userLastName = '" + lastName + "' ").getSingleResult();
您正在创建
createNativeQuery
,它使用本机数据库名称,而不是映射的名称。将createNativeQuery
更改为createQuery
应该会有所帮助。此外,使用本机查询还需要额外的工作来将结果映射到适当的实体。