【问题标题】:JPA Error a relationship that was not marked cascade PERSISTJPA 错误未标记级联 PERSIST 的关系
【发布时间】:2021-09-22 23:25:52
【问题描述】:

我有一个名为 State (of a Country) 的表和 JPA 实体,通过 JPA,我正在尝试为用户(实体)编写代码以在网站上注册。显然,用户和状态之间存在一对一的关系(一个用户只属于一个状态)。这是我的代码:

@Entity
@Table(name = "STATE")
public class State implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private int id;
    
    
    @Column(name = "CODE")
    private String code;
    
    @Column(name="NAME")
    private String name;

用户代码如下:

@Entity
@Table(name = "USER")
public class User implements Serializable {

....
@OneToOne()
    @JoinColumn(name = "STATE_ID", referencedColumnName = "ID")
    private State state;

数据库表如下:

CREATE TABLE IF NOT EXISTS `bjm`.`STATE` (
  `CODE` CHAR(2) NOT NULL,
  `NAME` VARCHAR(40) NOT NULL,
  `POST_CODE_PREFIX` VARCHAR(10) NULL,
  `LANG` CHAR(2) NOT NULL,
  `ID` INT NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`ID`))
ENGINE = InnoDB;


CREATE TABLE IF NOT EXISTS `bjm`.`USER` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `FIRSTNAME` VARCHAR(45) NOT NULL,
  `LASTNAME` VARCHAR(45) NOT NULL,
  `EMAIL` VARCHAR(50) NOT NULL,
  ....
  PRIMARY KEY (`ID`),
  CONSTRAINT `fk_USER_STATE1`
    FOREIGN KEY (`STATE_ID`)
    REFERENCES `bjm`.`STATE` (`ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
 )
ENGINE = InnoDB;

但是,当我尝试在我的 JSF2 应用程序中创建/注册用户时,我收到以下错误:

java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: org.bjm.model.State

我不想在数据库中创建新的状态记录。它们已经存在(作为参考数据),只需要通过外键分配给用户。

可能是我遗漏了什么,但我需要一个解决方案。任何建设性的意见都会有极大的帮助。

谢谢

【问题讨论】:

    标签: jsf-2 jpa-2.0


    【解决方案1】:

    显然,User 和 State 之间是一对一的关系(一个 User 只属于一个 State)

    好吧,显然这是错误。这是经典的@ManyToOne,因为许多用户来自同一个州。它应该是这样的:

    @Entity
    @Table
    public class User implements Serializable {
    
        // (...)
        @ManyToOne
        @JoinColumn(name = "STATE_ID")
        private State state;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 2017-01-30
      • 2013-03-05
      相关资源
      最近更新 更多