gpt4 book ai didi

mysql - 重复字段 Hibernate + MySQL [Play 1.2.4]

转载 作者:行者123 更新时间:2023-11-30 23:20:27 25 4
gpt4 key购买 nike

我有一个 MySQL 模型,其中包含 2 个表 Empresa(公司)和 Ruta(路线),它们之间存在 1:N 关系。我正在使用 NetBeans 进行开发。

在运行我的应用程序之前,在 MySQL 命令行中,我键入:

describe ruta;

我的表 ruta 有 3 个字段:

idRuta  --  int(10) unsigned --  NONULL  --  PK  --  DEFAULTNULL  --  AUTOINC  
zona -- varchar(45) -- NO NULL -- DEFAULTNULL --
idEmpresa -- int(11) -- NONULL -- KEYMUL -- DEFAULTNULL

当我运行我的 webapp 时,在添加任何对象之前,日志显示:

[...]  
17:32:39,163 INFO ~ Connected to jdbc:mysql://localhost:3306/opticaDB
17:32:41,021 ERROR ~ Unsuccessful: alter table Ruta add index FK270C1013017BBD (empresa_idEmpresa), add constraint FK270C1013017BBD foreign key (empresa_idEmpresa) references Empresa (idEmpresa)
17:32:41,021 ERROR ~ Can't create table 'opticadb.#sql-b0c_10' (errno: 150)
17:32:41,344 INFO ~ Application 'Optica2.0' is now started !
17:32:55,235 WARN ~ SQL Error: 1364, SQLState: HY000
17:32:55,235 ERROR ~ Field 'idEmpresa' doesn't have a default value
[...]

idEmpresa 是表EmpresaPK 和表RutaFK。然后,在我的应用程序运行时,当我输入

describe ruta;  

我的表 ruta 有四个字段:

idRuta  --  int(10) unsigned --  NONULL  --  PK  --  DEFAULTNULL  --  AUTOINC  
zona -- varchar(45) -- NONULL -- DEFAULTNULL --
idEmpresa -- int(11) -- NONULL -- KEYMUL -- DEFAULTNULL
empresa_idEmpresa -- bigint(20) -- YESNULL -- DEFAULTNULL

我的模型是这样的:

型号:Empresa

package models;    
import play.*;
import java.util.*;
import javax.persistence.*;
import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class Empresa extends GenericModel {

@Id
@GeneratedValue (strategy = GenerationType.AUTO)
public Long idEmpresa;

public String nombre;
public Integer telefono;
public String web;
public String direccion;

public String toString() {
return nombre;
}
}

模特:Ruta

package models;

import play.*;
import java.util.*;
import javax.persistence.*;
import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class Ruta extends GenericModel {

@Id
@GeneratedValue (strategy = GenerationType.AUTO)
public Long idRuta;
public String zona;

@ManyToOne
public Empresa empresa;

@Override
public String toString(){
return zona;
}
}

对这个问题有什么想法吗?

最佳答案

如果您在框架启动之前定义了表,通常会发生此问题。这是DDL生成模式特性,你可以在application.conf文件中禁用它,我建议将值设置为jpa.ddl=none 在生产模式下部署应用程序。

作为替代方案,如果您之前已经定义了您的表,尤其是您已经定义了外键。你应该这样做:

@Entity
public class Ruta extends GenericModel {

@Id
@GeneratedValue (strategy = GenerationType.AUTO)
public Long idRuta;
public String zona;

@ManyToOne
@JoinColumn(name = "idEmpresa")
public Empresa empresa;

@Override
public String toString(){
return zona;
}
}

请注意,有一个新的注释 @JoinColumn,它在字段 empresa 处采用参数 name(相关列名称)。参见 this reference进一步阅读。

UPDATE

JPA DDL UPDATE can't delete or sometimes update your column automatically, if you have defined the table previously). As alternative, you can execute ALTER TABLE sql manually for that table or if you are in development mode, deleting the previous table is the simple way to do that.

关于mysql - 重复字段 Hibernate + MySQL [Play 1.2.4],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15747050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com