热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何访问JPA中的鉴别符列

如何解决《如何访问JPA中的鉴别符列》经验,为你挑选了1个好方法。

我有以下代码DisseminationArea作为子cals Feature

@Entity
@Table(name = "features")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "subtype_id", discriminatorType = DiscriminatorType.INTEGER)
public class Feature {

   @Id
   @Column(name="id")
   @GeneratedValue(generator="sqlite")
   @TableGenerator(name="sqlite", table="sqlite_sequence",
      pkColumnName="name", valueColumnName="seq",
      pkColumnValue="features")
   @Getter
   @Setter
   private long id;

   @ManyToOne
   @JoinColumn(name = "subtype_id")
   @Getter
   @Setter
   private FeatureSubtype featureSubtype;

   @ManyToOne
   @JoinColumn(name = "parent_id")
   @Getter
   @Setter
   private Feature parent;

   ...    
}

不幸的是,这将实体保存到数据库时会导致异常,因为该subtype_id字段被使用了两次。

我可以以某种方式注释它,以便JPA知道它是同一字段吗?



1> Kevin Peters..:

如果区分符列有意义,InheritanceType.JOINED则值得讨论。我倾向于在加入策略时忽略它,而仅将其与结合使用InheritanceType.SINGLE_TABLE

但是,可以映射它而不会出现重复的列错误。

如果您的超类实体具有继承/鉴别符定义,例如:

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "subtype_id", discriminatorType = DiscriminatorType.INTEGER)

您只需将映射设置为只读即可将其调整为不像往常一样更新值:

@Column(name="subtype_id", insertable = false, updatable = false)
protected int subTypeId;

public int getSubTypeId() {
    return subTypeId;
}

现在,您可以访问实体的鉴别值。


推荐阅读
author-avatar
mobiledu2502887637
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有