JPA 实体在实施物料清单概念时出现错误

Posted

技术标签:

【中文标题】JPA 实体在实施物料清单概念时出现错误【英文标题】:JPA entity giving error on implementing Bill of material concept 【发布时间】:2013-07-29 11:38:15 【问题描述】:

尝试使用 JPA 实体实现物料清单概念:- IDE:Eclipse Helios; 罐子: eclipselink2.4.0 , javax.persistence 实体如下:

@Id
@TableGenerator(name = "Config_Key_Incrementor", table = "id_generator", pkColumnName = "gen_name", valueColumnName = "gen_value", pkColumnValue = "conifg_id_gen", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = TABLE, generator = "Config_Key_Incrementor")
@Column(name = "config_id")
private int configId;

@Column(name = "config_name")
private String configName;

//bi-directional many-to-one association to Bill_Of_Material
@ManyToOne
@PrimaryKeyJoinColumn(name="config_id")
private Configuration parent;

//bi-directional many-to-one association to Bill_Of_Material
@OneToMany(mappedBy="parent")
private List<Configuration> children = new ArrayList<Configuration>();

public Configuration getParent() 
    return parent;


public void setParent(Configuration parent) 
    this.parent = parent;




public List<Configuration> getChildren() 
    return children;


public void setChildren(List<Configuration> children) 
    this.children = children;


public int getConfigId() 
    return configId;


public void setConfigId(int configId) 
    this.configId = configId;


public String getConfigName() 
    return configName;


public void setConfigName(String configName) 
    this.configName = configName;

输出:

  CREATE TABLE configuration    
  (    
  config_id integer NOT NULL,  
  config_name character varying(255),    
  CONSTRAINT configuration_pkey PRIMARY KEY (config_id ),  
  CONSTRAINT fk_configuration_config_id FOREIGN KEY (config_id)  
         REFERENCES configuration (config_id) MATCH SIMPLE  
         ON UPDATE NO ACTION ON DELETE NO ACTION  
  )

错误: 正在创建表,但缺少 parent_config_id 列,并且它与 config_id 的关系也丢失了。

【问题讨论】:

【参考方案1】:

您正在使用 @PrimaryKeyJoinColumn(name="config_id") 这表明主键也是所引用配置父级的外键 - 所以它是它自己的父级。您想使用@JoinColumn 来定义外键,或者将其留空以使其使用默认值。

@ManyToOne
@JoinColumn(name="parent_config_id", referencedColumnName="config_id")
private Configuration parent;

【讨论】:

感谢您的快速回复。建议的解决方案效果很好。但是当 IDE 环境是具有相同版本的 eclipselink 和 javax.persistence jar 的 eclipse juno 时,我发布的相同代码正在工作。当我尝试在 helios 中运行时,我无法弄清楚为什么它的行为会有所不同。谢谢

以上是关于JPA 实体在实施物料清单概念时出现错误的主要内容,如果未能解决你的问题,请参考以下文章

查询 MySql 视图时出现 SQLGrammar 错误

JPA,打开 JPA OneToMany - FailedObject

错误 MSB3171:生成清单时出现问题

调用super的方法时出现JPA Transaction错误

应用程序构建成功但出现错误:运行映像时出现“没有主清单属性,在 app.jar 中”

尝试实施 Azure Active Directory B2C 时出现 404 错误