【问题标题】:DuplicateMappingException represented by different logical column names不同逻辑列名表示的 DuplicateMappingException
【发布时间】:2014-09-21 00:52:42
【问题描述】:

我正在为两个类 MasavNew 和 MasavRow 使用 OneToMany 映射:

@Entity
@Table(name = "ArgoCHFileHdr")
public class MasavNew  {


@OneToMany(fetch = FetchType.LAZY, mappedBy = "msv",cascade = CascadeType.ALL)
@ElementCollection(targetClass=MasavRow.class)
private List<MasavRow> rows;

@Id
@Column(name = "[Arg.CH.F.Key]", nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
protected Integer argCHFKey;

}


@Entity
@Table(name = "ArgoCHFileRow")
@DynamicUpdate
public class MasavRow extends IModel {


@ManyToOne(fetch = FetchType.LAZY,optional=true)
@JoinColumn(name="[Arg.CH.F.Key]")
private MasavNew msv;


@Id
@Column(name = "[Arg.CH.F.Key]", nullable = false)
private int argCHFKey;


@Id
@Column(name = "[Arg.CH.L.MNB]", nullable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer argCHLMNB;


@Column(name = "[Erp.Clnt]", nullable = true)
private String erpClnt;


}

然后在运行中我收到下一个异常:

Caused by: org.hibernate.DuplicateMappingException:  Table [ArgoCHFileRow] contains physical column name [`Arg.CH.F.Key`] represented by different logical column names: [`Arg.CH.F.Key`], [Arg.CH.F.Key]
    at org.hibernate.cfg.Configuration$MappingsImpl$TableColumnNameBinding.bindPhysicalToLogical(Configuration.java:3185)
    at org.hibernate.cfg.Configuration$MappingsImpl$TableColumnNameBinding.addBinding(Configuration.java:3158)
    at org.hibernate.cfg.Configuration$MappingsImpl.addColumnBinding(Configuration.java:3202)
    at org.hibernate.cfg.Ejb3JoinColumn.addColumnBinding(Ejb3JoinColumn.java:532)
    at org.hibernate.cfg.Ejb3Column.linkWithValue(Ejb3Column.java:364)
    at org.hibernate.cfg.annotations.TableBinder.linkJoinColumnWithValueOverridingNameIfImplicit(TableBinder.java:523)
    at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:457)
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:117)
    at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1596)
    at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1519)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1420)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:343)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:431)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:416)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)

我该如何解决这个问题?

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    删除

    @Id
    @Column(name = "[Arg.CH.F.Key]", nullable = false)
    private int argCHFKey;
    

    因为您可以从 msv 对象中获取密钥。

    【讨论】:

    • 当我直接使用表格时,我希望有这个列
    • 覆盖您的 getArgCHFKey() 方法以返回 msv.getKey();
    • 我需要通过 argCHFKey 键从 ArgoCHFileRow 表中检索所有行
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    相关资源
    最近更新 更多