我的一个专栏叫做from.我无法更改名称,因为我没有成功.我是否允许做类似的事情SELECT from FROM TableName或是否有特殊的语法来避免SQL Server混淆?
我试图为几个不同的数据库使用一个Hibernate映射:H2,Oracle,MySql.
每个数据库都有一个不同的保留字列表.
我希望Hibernate能够自动转义保留字.
我知道我可以:
有更优雅的解决方案吗?
我正在使用Spring mvc Web应用程序,我需要使用Hibernate创建一个城镇.以下是我的城镇模型.
@Entity
@Table(name="town")
public class TownModel {
@Id
@Column(name="townid")
@GeneratedValue
private Integer townId;
@Column(name="name")
private String townName;
@Column(name="desc")
private String townDesc;
@ManyToOne(optional = true)
@JoinColumn(name="districtid")
private DistrictModel districtModel;
}
Run Code Online (Sandbox Code Playgroud)
我有另一个名为district的实体.城镇是区的一部分,一个区可以有多个城镇.以下是我的区域模型:
@Entity
@Table(name="district")
public class DistrictModel {
@Id
@Column(name="districtid")
@GeneratedValue
private Integer districtId;
@Column(name="name")
private String name;
@Column(name="desc")
private String description;
@OneToMany(mappedBy = "districtModel", fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
private List<TownModel> townModelList;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下Hibernate代码来保存城镇:
Session session = sessionFactory.getCurrentSession();
session.save(townModel);
Run Code Online (Sandbox Code Playgroud)
但它显示错误:
21:22:08,104 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http--127.0.0.1-9090-1) SQL Error: 1064, SQLState: …Run Code Online (Sandbox Code Playgroud) 运行此SQL语句时:
select TimeInterval,
((((Timer*60)/1.0)*100)/((10.0*60)/60.0)) as 'Throughput-run_1_8_11'
from StatExternalData, StatisticDefinition
where StatisticDefinition.ID=StatExternalData.StatDefId
and StatisticName='PSI_CompTran_Successful_Cnt'
order by TimeInterval asc
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
"select TimeInterval, ((((Timer*60)/1.0)*100)/((10.0*60)/60.0)) as 'Throughput-run_1_8_11'[*] from StatExternalData, StatisticDefinition where StatisticDefinition.ID=StatExternalData.StatDefId and StatisticName='PSI_CompTran_Successful_Cnt' order by TimeInterval asc";
expected "identifier"; [42001-185]
Run Code Online (Sandbox Code Playgroud)
我已经发现[*]表示该语句的哪一部分是不正确的,并且H2错误代码42001表示一个无效的SQL语句,但是我已经敲了几个星期试图弄清楚是什么问题是,有谁有想法?
我在Hibernate上尝试了简单的程序并且遇到了一堆异常.
我无法弄清楚到底出了什么问题.
我有三个班 - 书,读者和使用.最后一个是绑定前两个,依赖一对多.
这是我的main():
public class Appl {
public static void main(String[] args) {
Book book = new Book();
book.setTitle("book01155");
//
Reader reader = new Reader();
reader.setName("reader2");
//
Using using = new Using();
using.setIdBook(book);
using.setIdReader(reader);
//
List<Book> elements = new ArrayList<Book>();
//
Session session = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(book);
session.save(reader);
session.save(using);
elements = session.createCriteria(Book.class).list();
session.getTransaction().commit();
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
for (Book b : …Run Code Online (Sandbox Code Playgroud) 我得到了和OneToMany之间的关系UserGroup
Group.java
@Entity
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String groupid;
@ManyToOne
@JoinColumn(name="USER_FK")
private User user;
...
}
Run Code Online (Sandbox Code Playgroud)
User.java
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String userId;
private String password;
private String fname;
private String lname;
@OneToMany(mappedBy="user", cascade=CascadeType.ALL)
private List<Group> groups;
public void addGroup(Group group){
if(this.groups == null){
this.groups = new ArrayList<Group>();
}
this.groups.add(group);
group.setUser(this);
}
}
Run Code Online (Sandbox Code Playgroud)
所以当我试图坚持这个对象时
User user = em.find(User.class, 1L); …Run Code Online (Sandbox Code Playgroud) 我在使用Hibernate 4.1和MySQL 5将文件夹实体保存到数据库时收到了我在下面添加的错误.我对其他权利没有任何问题.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax
Run Code Online (Sandbox Code Playgroud)
这是我的文件夹表:
CREATE TABLE `folder` (
`folder_id` int(11) NOT NULL AUTO_INCREMENT,
`folder_name` varchar(45) COLLATE utf8_turkish_ci NOT NULL,
`order` int(11) DEFAULT NULL,
PRIMARY KEY (`folder_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci$$
Run Code Online (Sandbox Code Playgroud)
我的文件夹实体:
@Entity
@Table(name = "folder")
public class Folder implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "folder_id", nullable = false, …Run Code Online (Sandbox Code Playgroud) 我有一个名为的实体User,它通向一个名为的表,该表user在 PostgreSQL 中应该用引号括起来才能工作。我知道我可以指定一个自定义表名,但是 Hibernate 不应该自动做引号吗?
有人告诉我,也许 Hibernate 没有使用 PostgreSQL 方言。当我的数据库配置如下时,这可能吗:
spring.datasource.url = jdbc:postgresql://localhost/database_name
spring.datasource.username = username
spring.datasource.password = password
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,我如何让 Hibernate 使用正确的方言?
我试过:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
Run Code Online (Sandbox Code Playgroud)
和
spring.jpa.database=postgresql
Run Code Online (Sandbox Code Playgroud)
和
spring.jpa.database-platform = org.hibernate.dialect.PostgreSQL94Dialect
Run Code Online (Sandbox Code Playgroud)
和
spring.jpa.database=org.hibernate.dialect.PostgreSQLDialect
Run Code Online (Sandbox Code Playgroud)
对错误没有影响:
Hibernate: insert into user (created_at, last_modified_at, account_id, email, hashed_password_salt, name, over_hashed_password, preferred_name, public_key, started_displaying_sites_at, watched_tutorial_at, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2017-09-08 14:41:40.177 WARN 15764 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42601 …Run Code Online (Sandbox Code Playgroud) 我的代码中收到了“ORA-00923:在预期位置未找到 FROM 关键字”错误。我正在尝试使用 Spring Hibernate 实现 CRUD 操作。我已经检查了 sql 查询中的语法错误以及引号,但似乎无法检测到任何异常情况。
用户类别:
package com.spring.model;
import javax.persistence.*;
@Entity
@Table(name="PATIENT_MODEL")
public class User {
private int id;
private String patientFirstName;
private String patientLastName;
private String patientEmail;
private String patientAddress1;
private String patientAddress2;
@Id
@GeneratedValue
@Column(name="PATIENT_ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="PATIENT_FIRST_NAME")
public String getPatientFirstName() {
return patientFirstName;
}
public void setPatientFirstName(String patientFirstName) {
this.patientFirstName = patientFirstName;
}
@Column(name="PATIENT_LAST_NAME")
public String getPatientLastName() { …Run Code Online (Sandbox Code Playgroud) hibernate ×6
java ×6
spring ×3
mysql ×2
orm ×2
sql ×2
escaping ×1
exception ×1
foreign-keys ×1
h2 ×1
java-ee ×1
jpa ×1
mysql5 ×1
oracle ×1
postgresql ×1
spring-mvc ×1
sql-server ×1