Java Can';t通过persistence.xml文件将数据插入数据库
我创建了一个PostgreSQL脚本,只是为了在customer表中插入一行。插入发生在项目开始运行时 但它不起作用,因为我得到以下错误:Java Can';t通过persistence.xml文件将数据插入数据库,java,postgresql,jpa,jakarta-ee,persistence.xml,Java,Postgresql,Jpa,Jakarta Ee,Persistence.xml,我创建了一个PostgreSQL脚本,只是为了在customer表中插入一行。插入发生在项目开始运行时 但它不起作用,因为我得到以下错误: [EL Warning]: 2016-10-23 22:14:40.182--ServerSession(609762439)--?>Exception [EclipseLink-4002] (Eclipse Persistence Services - >2.5.2.v20140319-9ad6abd): org.eclipse.persist
[EL Warning]: 2016-10-23 22:14:40.182--ServerSession(609762439)--?>Exception [EclipseLink-4002] (Eclipse Persistence Services - >2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: org.postgresql.util.PSQLException: ERROR: syntax >error at end of input
Position: 82 Error Code: 0 Call: INSERT INTO customer (id, Name, Adres, PostalCode, City, Tel, >Fax, Number) VALUES Query: DataModifyQuery(sql="INSERT INTO customer (id, Name, Adres, >PostalCode, City, Tel, Fax, Number) VALUES") [EL Warning]: 2016-10-23 22:14:40.183--ServerSession(609762439)-->Exception [EclipseLink-4002] (Eclipse Persistence Services - >2.5.2.v20140319-9ad6abd): >org.eclipse.persistence.exceptions.DatabaseException Internal Exception: org.postgresql.util.PSQLException: ERROR: syntax >error at or near "1"
Position: 2 Error Code: 0 Call: (1, 'Kantoor Snel Transport / Distributiecentrum', >'Zeugstraat', '2801JD', 'Gouda', 182512784, NULL, '92'); Query: DataModifyQuery(sql="(1, 'Kantoor Snel Transport / >Distributiecentrum', 'Zeugstraat', '2801JD', 'Gouda', 182512784, NULL, >'92');") [EL Info]: connection: 2016-10-23 22:15:02.917-->ServerSession(609762439)-->file:/C:/Users/yomac_000/workspace/.metadata/.plugins/org.eclipse.wst.ser>ver.core/tmp0/wtpwebapps/snel-transport/WEB-INF/classes/_snel-transport >logout successful
以下是persistence.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="snel-transport" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>nl.cimsolutions.snel_transport.models.Orders</class>
<class>nl.cimsolutions.snel_transport.models.OrderLine</class>
<class>nl.cimsolutions.snel_transport.models.OrderList</class>
<class>nl.cimsolutions.snel_transport.models.Customer</class>
<class>nl.cimsolutions.snel_transport.models.Product</class>
<class>nl.cimsolutions.snel_transport.models.Category</class>
<class>nl.cimsolutions.snel_transport.models.Status</class>
<class>nl.cimsolutions.snel_transport.models.Truck</class>
<!-- <jta-data-source>java:app/snel-transport</jta-data-source> -->
<!-- <exclude-unlisted-classes>false</exclude-unlisted-classes> -->
<properties>
<property
name="javax.persistence.schema-generation.database.action"
value="drop-and-create" />
<property name="eclipselink.canonicalmodel.subpackage"
value="dev" />
<property name="javax.persistence.sql-load-script-source"
value="META-INF/sql/Customer2.sql" />
<property name="javax.persistence.schema-generation-target"
value="database" />
<property name="javax.persistence.jdbc.driver"
value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:postgresql://localhost:5432/snel-transport" />
<property name="javax.persistence.jdbc.user" value="transport_user" />
<property name="javax.persistence.jdbc.password"
value="admin" />
<property name="javax.persistence.jdbc.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
以下是客户模型的外观:
@Entity
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@TableGenerator(
name = "CustomerGenerator",
allocationSize = 1,
initialValue = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator="CustomerGenerator")
private Long id;
private String name;
private String adres;
@Column(name="Number")
private String streetNumber;
@Column(name="PostalCode")
private String postalCode;
@Column(name="City")
private String city;
@Column(name="Tel")
private String tel;
@Column(name="Fax")
private String fax;
@OneToMany(mappedBy = "customer", targetEntity = Orders.class)
private List<Orders> orders;
public Customer() {
// TODO Auto-generated constructor stub
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getStreetNumber() {
return streetNumber;
}
public void setStreetNumber(String streetNumber) {
this.streetNumber = streetNumber;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getFax() {
return fax;
}
public void setFax(String fax) {
this.fax = fax;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public String toString() {
return "model.OrderLine[ id=" + id + " ]";
}
public String getName() {
return name;
}
public String getAdres() {
return adres;
}
public void setName(String name) {
this.name = name;
}
public void setAdres(String adres) {
this.adres = adres;
}
}
@实体
公共类Customer实现了可序列化{
私有静态最终长serialVersionUID=1L;
@表格生成器(
name=“CustomerGenerator”,
allocationSize=1,
初始值=1)
@身份证
@GeneratedValue(策略=GenerationType.TABLE,
generator=“CustomerGenerator”)
私人长id;
私有字符串名称;
私有字符串地址;
@列(name=“Number”)
私人字符串街号;
@列(name=“PostalCode”)
专用字符串后代码;
@列(name=“City”)
私人城市;
@列(name=“Tel”)
私人电话;
@列(name=“Fax”)
私人字符串传真;
@OneToMany(mappedBy=“customer”,targetEntity=Orders.class)
私人名单订单;
公众客户(){
//TODO自动生成的构造函数存根
}
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getStreetNumber(){
返回街道号码;
}
公共无效设置街号(字符串街号){
this.streetNumber=街道编号;
}
公共字符串getPostalCode(){
返回后代码;
}
公共无效setPostalCode(字符串postalCode){
this.postalCode=postalCode;
}
公共字符串getCity(){
回归城市;
}
公共城市(字符串城市){
this.city=城市;
}
公共字符串getTel(){
返回电话;
}
公共电话(字符串电话){
this.tel=tel;
}
公共字符串getFax(){
回传传真;
}
公用传真(字符串传真){
this.fax=传真;
}
@凌驾
公共int hashCode(){
int hash=0;
hash+=(id!=null?id.hashCode():0);
返回散列;
}
@凌驾
公共字符串toString(){
返回“model.OrderLine[id=“+id+”]”;
}
公共字符串getName(){
返回名称;
}
公共字符串getAdres(){
返回地址;
}
公共void集合名(字符串名){
this.name=名称;
}
公共无效设置地址(字符串地址){
this.adres=adres;
}
}
我已经尝试在pgAdmin中使用PostgreSQL脚本。脚本在那里工作,但不知怎么的,它在JPA中不起作用。。有人知道我如何解决这个问题吗?尝试删除换行符,似乎它将其解释为两个独立的查询。@Tobb这确实有效,谢谢。但是我有一个包含40行的脚本。你知道我如何简单地删除这40行的所有换行符吗?还有,我如何简单地在这40行中添加换行符?我需要这个,因为将来我可以在脚本中添加一行。我很乐意以一种更具可读性的方式来做这件事。一些JPA提供商(例如DataNucleus)提供拆分行服务,而您的(EclipseLink)似乎没有。在你的JPA提供者上提出一个错误。在我看来,使用JPA填充你的数据库是不对的。相反,我会使用类似于
liquibase
或flyway
的方法来实现这一点。尝试删除换行符,似乎它将其解释为两个独立的查询。@Tobb确实有效,谢谢。但是我有一个包含40行的脚本。你知道我如何简单地删除这40行的所有换行符吗?还有,我如何简单地在这40行中添加换行符?我需要这个,因为将来我可以在脚本中添加一行。我很乐意以一种更具可读性的方式来做这件事。一些JPA提供商(例如DataNucleus)提供拆分行服务,而您的(EclipseLink)似乎没有。在你的JPA提供者上提出一个错误。在我看来,使用JPA填充你的数据库是不对的。相反,我会使用类似于liquibase
或flyway
的方法来实现这一点。。
@Entity
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@TableGenerator(
name = "CustomerGenerator",
allocationSize = 1,
initialValue = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator="CustomerGenerator")
private Long id;
private String name;
private String adres;
@Column(name="Number")
private String streetNumber;
@Column(name="PostalCode")
private String postalCode;
@Column(name="City")
private String city;
@Column(name="Tel")
private String tel;
@Column(name="Fax")
private String fax;
@OneToMany(mappedBy = "customer", targetEntity = Orders.class)
private List<Orders> orders;
public Customer() {
// TODO Auto-generated constructor stub
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getStreetNumber() {
return streetNumber;
}
public void setStreetNumber(String streetNumber) {
this.streetNumber = streetNumber;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getFax() {
return fax;
}
public void setFax(String fax) {
this.fax = fax;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public String toString() {
return "model.OrderLine[ id=" + id + " ]";
}
public String getName() {
return name;
}
public String getAdres() {
return adres;
}
public void setName(String name) {
this.name = name;
}
public void setAdres(String adres) {
this.adres = adres;
}
}