маппинг таблиц

 
 
 
Сообщения:17
приветствую
столкнулся с проблемой, прошу помощи

есть две таблицы

CREATE TABLE testproject.project_status (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  name varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;

CREATE TABLE testproject.project (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  status_id bigint(20) DEFAULT NULL,
  name varchar(50) DEFAULT '',
  PRIMARY KEY (id),
  CONSTRAINT FK_project_project_status_id FOREIGN KEY (status_id)
  REFERENCES testproject.project_status (id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = INNODB
AUTO_INCREMENT = 1
CHARACTER SET utf8
COLLATE utf8_general_ci;


и есть две модели:

package edu.main.project.demo.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;

import javax.persistence.*;
import java.util.Collection;

@Entity(name = "ProjectStatus")
@Table(name = "project_status", schema = "testproject")
public class ProjectStatus {

    private Long id;
    private String name;

    private Collection<Project> projects;

    @JsonIgnore
    @OneToMany(mappedBy = "projectStatus")
    public Collection<Project> getProjects() {
        return projects;
    }

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

    public ProjectStatus() {
    }

    public ProjectStatus(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    @Id
    @Column(name = "id")
//    @Access(value = AccessType.PROPERTY)
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

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

    @Basic
    @Column(name = "name")
    public String getName() {
        return name;
    }

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


package edu.main.project.demo.entity;

import javax.persistence.*;

@Entity(name = "Project")
@Table(name = "project", schema = "testproject")
public class Project {

    private Long id;
    private Long statusId;
    private String name;

    private ProjectStatus projectStatus;

    @ManyToOne(fetch = FetchType.EAGER)
    @PrimaryKeyJoinColumn(name = "status_id", referencedColumnName = "id",
            foreignKey = @ForeignKey(name = "FK_project_project_status_id"))
    public ProjectStatus getProjectStatus() {
        return projectStatus;
    }

    public void setProjectStatus(ProjectStatus projectStatus) {
        this.projectStatus = projectStatus;
    }

    public Project() {
    }

    public Project(Long id, Long statusId, String name) {
        this.id = id;
        this.statusId = statusId;
        this.name = name;
    }

    @Id
    @Column(name = "id")
//    @Access(value = AccessType.PROPERTY)
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

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

    @Basic
    @Column(name = "status_id")
    public Long getStatusId() {
        return statusId;
    }

    public void setStatusId(Long statusId) {
        this.statusId = statusId;
    }

    @Basic
    @Column(name = "name")
    public String getName() {
        return name;
    }

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


я не могу влиять на таблицы, т.е. изменять их и добавлять новые ключи (все уже есть)
мне нужно следующее:
1. сделать правильные связи с указанием имени ключа
2. недопустить создание новых ключей (установлен hbm2ddl.method: update, правда я не знаю правильно это или нет)
3. организовать вставку в таблицу projects, в поле status_id просто вставив цифру, но для этого мне нужно избежать следующего:
@Column(name = "status_id", insertable = false, updatable = false)
так как в этом случае я не могу установить значение этого поля вручную, а надо

может я что-то не так понимаю, разьясните
спасибо
 
 
Сообщения:1165
Надеюсь поможет https://www.mkyong.com/hibernate/how-to-generate-code-with-hibernate-tools/

The meaning of life, universe and everything is 42!
Изменен:09 янв 2018 02:06
 
 
Сообщения:278
krist:
2. недопустить создание новых ключей (установлен hbm2ddl.method: update, правда я не знаю правильно это или нет)

update как и будет менять таблицы (структуры данных) в соответствии с состоянием entity
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет