使用Spring,Hibernate,JPA将数据插入表中

时间:2016-11-19 21:30:17

标签: hibernate jpa spring-boot

我试图将数据导入到从实体创建的表中。 这是产生的错误。

我的架构

Hibernate: create table pledges (id integer not null auto_increment, amount double precision, date datetime, project_id integer, user_id integer, primary key (id))
Hibernate: create table projects (id integer not null auto_increment, pledge_amount double precision, date datetime, description_project longtext, image varchar(255), project_name varchar(255), required_money double precision, status integer, user_id integer, primary key (id))
Hibernate: create table users (id integer not null auto_increment, credit double precision, email varchar(80), full_name varchar(45), password varchar(255), primary key (id))

我的其余日志:

Hibernate: alter table pledges add constraint UKhy4wjumf9bhip4v5hamiakkpn unique (user_id, project_id)
Hibernate: alter table users add constraint UK_6dotkott2kjsp8vw4d0m25fb7 unique (email)
Hibernate: alter table pledges add constraint FKrhpj4pdxfa62tffq87i06jkiv foreign key (project_id) references projects (id)
Hibernate: alter table pledges add constraint FKmsyjxxpylu6epd5wmsdi9i9u8 foreign key (user_id) references users (id)
Hibernate: alter table projects add constraint FKhswfwa3ga88vxv1pmboss6jhm foreign key (user_id) references users (id)
2016-11-19 21:15:31.966  INFO 12876 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000476: Executing import script '/import.sql'
2016-11-19 21:15:31.971 ERROR 12876 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000388: Unsuccessful: INSERT INTO projects VALUES (1, 200, CURRENT_TIMESTAMP , 'some description', 'pathtoimage', 'ProjectTransformers', 500, 1, 1)
2016-11-19 21:15:31.971 ERROR 12876 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : Referential integrity constraint violation: "FKHSWFWA3GA88VXV1PMBOSS6JHM: PUBLIC.PROJECTS FOREIGN KEY(USER_ID) REFERENCES PUBLIC.USERS(ID) (1)"; SQL statement:
INSERT INTO projects VALUES (1, 200, CURRENT_TIMESTAMP , 'some description', 'pathtoimage', 'ProjectTransformers', 500, 1, 1) [23506-193]
2016-11-19 21:15:31.972 ERROR 12876 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000388: Unsuccessful: INSERT INTO pledges VALUES (1, 200, CURRENT_TIMESTAMP , 1, 1)
2016-11-19 21:15:31.974 ERROR 12876 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : Referential integrity constraint violation: "FKRHPJ4PDXFA62TFFQ87I06JKIV: PUBLIC.PLEDGES FOREIGN KEY(PROJECT_ID) REFERENCES PUBLIC.PROJECTS(ID) (1)"; SQL statement:
INSERT INTO pledges VALUES (1, 200, CURRENT_TIMESTAMP , 1, 1) [23506-193]
2016-11-19 21:15:31.974  INFO 12876 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete
2016-11-19 21:15:32.024  INFO 12876 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2016-11-19 21:15:32.634  WARN 12876 --- [           main] .t.AbstractTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
2016-11-19 21:15:32.765  INFO 12876 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-11-19 21:15:32.778  INFO 12876 --- [           main] i.c.c.application.CrowdfundApplication   : Started CrowdfundApplication in 3.817 seconds (JVM running for 4.188)
2016-11-19 21:15:32.779  INFO 12876 --- [       Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@181ce95: startup date [Sat Nov 19 21:15:29 GMT 2016]; root of context hierarchy
2016-11-19 21:15:32.780  INFO 12876 --- [       Thread-2] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
2016-11-19 21:15:32.780  INFO 12876 --- [       Thread-2] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'

User.java

package ie.cit.crowdfund.application.entity;

import javax.persistence.*;
import java.util.DoubleSummaryStatistics;
import java.util.List;

@Entity(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(length = 45)
    private String fullName;

    @Column(length = 80, unique = true)
    private String email;

    @Column
    private String password;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
    private List<Project> projects;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "user")
    private List<Pledge> pledges;

    @Column
    private Double credit;

    public User() {
    }

    public User(String fullName, String email, String password) {
        this.fullName = fullName;
        this.email = email;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String firstName) {
        this.fullName = firstName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public List<Project> getProjects() {
        return projects;
    }

    public void setProjects(List<Project> projects) {
        this.projects = projects;
    }

    public List<Pledge> getPledges() {
        return pledges;
    }

    public void setPledges(List<Pledge> Pledges) {
        this.pledges = Pledges;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Double getCredit() {
        return credit;
    }

    public void setCredit(Double credit) {
        this.credit = credit;
    }

}

Project.java

package ie.cit.crowdfund.application.entity;

import ie.cit.crowdfund.application.utils.NewFormat;
import org.hibernate.annotations.Type;

import javax.persistence.*;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

@Entity(name = "projects")
public class Project {


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column
    private double requiredMoney;

    @Column
    @Type(type = "text")
    private String descriptionProject;

    @Column
    private String image;

    @Column
    private double Pledge_amount;

    @Column
    private Timestamp date;

    @Enumerated
    private Status status;

    @Column(name = "project_name")
    private String name;


    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "project")
    private List<Pledge> PledgeList = new ArrayList<>();

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "user_id")
    private User user;


    public Project() {
    }

    public Project(User user, double requiredMoney, String descriptionProject, String image, double Pledge_amount, Timestamp date, Status status, String name, List<Pledge> PledgeList) {
        this.user = user;
        this.requiredMoney = requiredMoney;
        this.descriptionProject = descriptionProject;
        this.image = image;
        this.Pledge_amount = Pledge_amount;
        this.date = date;
        this.status = status;
        this.name = name;
        this.PledgeList = PledgeList;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public User getUserId() {
        return user;
    }

    public void setUserId(int userId) {
        this.user = user;
    }

    public double getrequiredMoney() {
        return requiredMoney;
    }

    public void setrequiredMoney(double requiredMoney) {
        this.requiredMoney = requiredMoney;
    }

    public String getdescriptionProject() {
        return descriptionProject;
    }

    public void setdescriptionProject(String descriptionProject) {
        this.descriptionProject = descriptionProject;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public double getPledge_amount() {
        return PledgeList.stream().mapToDouble(Pledge::getAmount).sum();
    }

    public void setPledge_amount(double Pledge_amount) {
        this.Pledge_amount = Pledge_amount;
    }

    public Timestamp getDate() {
        return date;
    }

    public void setDate(Timestamp date) {
        this.date = date;
    }

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Pledge> getPledgeList() {
        return PledgeList;
    }

    public void setPledgeList(List<Pledge> PledgeList) {
        this.PledgeList = PledgeList;
    }

    public double percentPledge() {
        double percent = getPledge_amount() / requiredMoney * 100;
        return NewFormat.roundNumber(percent);
    }

    public boolean finishedProject() {
//        if (percentPledge() >= FINISHED)
//        {
//            return true;
//        }
//        else {
//            return false;
//        }
        return true;
    }

    public String dateFormat() {
        return "" + date.getDate() + "-" + (date.getMonth() + 1) + "-" + (date.getYear() + 1900);
    }
    @Override
    public String toString() {
        return "Project{" +
                "id=" + id +
                ", user=" + user +
                ", requiredMoney=" + requiredMoney +
                ", descriptionProject='" + descriptionProject + '\'' +
                ", image='" + image + '\'' +
                ", Pledge_amount=" + Pledge_amount +
                ", date=" + date +
                ", status='" + status + '\'' +
                ", name='" + name + '\'' +
                ", PledgeList=" + PledgeList +
                '}';
    }
}

Pledge.java

package ie.cit.crowdfund.application.entity;

import javax.persistence.*;
import java.sql.Timestamp;

@Entity(name = "pledges")
@Table(name = "pledges", uniqueConstraints = @UniqueConstraint(columnNames = {"user_id", "project_id"}))
public class Pledge {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@ManyToOne
@JoinColumn(name = "user_id")
private User user;

@Column
private double amount;

@ManyToOne
@JoinColumn(name = "project_id")
private Project project;

@Column
private Timestamp date;


public Pledge() {
}

public Pledge(User user, double amount, Project project, boolean approved, Timestamp date) {
    this.user = user;
    this.amount = amount;
    this.project = project;
    this.date = date;
}

public Project getProject() {
    return project;
}

public void setProject(Project project) {
    this.project = project;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

public double getAmount() {
    return amount;
}

public void setAmount(double amount) {
    this.amount = amount;
}

public Project getProjectId() {
    return project;
}

public void setProjectId(Project project) {
    this.project = project;
}

public Timestamp getDate() {
    return date;
}

public void setDate(Timestamp date) {
    this.date = date;
}

public String setDateFormat() {
    return "" + date.getDate() + "-" + (date.getMonth() + 1) + "-" + (date.getYear() + 1900);
}

}

这是我正在运行的import.sql。

INSERT INTO projects VALUES (1, 200, CURRENT_TIMESTAMP , 'some description', 'pathtoimage', 'ProjectTransformers', 500, 1, 1)
INSERT INTO users VALUES (1, 1000, 'something@gmail.com', 'Jenna Smith', '1234')
INSERT INTO pledges VALUES (1, 200, CURRENT_TIMESTAMP , 1, 1)

我认为import.sql有问题,但我不知道是什么。我错过了什么吗?有什么不对吗?

1 个答案:

答案 0 :(得分:0)

import.sql中,首先插入父表,而不是相关的子项:

INSERT INTO users VALUES (1, 1000, 'something@gmail.com', 'Jenna Smith', '1234');
INSERT INTO projects VALUES (1, 200, CURRENT_TIMESTAMP , 'some description', 'pathtoimage', 'ProjectTransformers', 500, 1, 1);
INSERT INTO pledges VALUES (1, 200, CURRENT_TIMESTAMP , 1, 1);