Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理@DiscriminatorColumn中的空值_Java_Orm_Jpa 2.0_Eclipselink_Single Table Inheritance - Fatal编程技术网

Java 处理@DiscriminatorColumn中的空值

Java 处理@DiscriminatorColumn中的空值,java,orm,jpa-2.0,eclipselink,single-table-inheritance,Java,Orm,Jpa 2.0,Eclipselink,Single Table Inheritance,我有一个遗留的MSSQLServer2000数据表,我正试图用JPA(准确地说是EclipseLink)映射它 我有一个表“CONTACT1”,其中有一个文本字段“KEY1”,可以是“Contact”或“Asset”,我正在使用: @Table(name = "CONTACT1") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(discriminatorType = Discriminator

我有一个遗留的MSSQLServer2000数据表,我正试图用JPA(准确地说是EclipseLink)映射它

我有一个表“CONTACT1”,其中有一个文本字段“KEY1”,可以是“Contact”或“Asset”,我正在使用:

@Table(name = "CONTACT1")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = "KEY1")
public abstract class Record {
将其映射到两个不同的类(Contact和Asset)

不幸的是,我发现一些或记录丢失了,经过进一步分析,我意识到一些联系人记录的“KEY1”字段设置为空

虽然我可以运行一个更新查询来修复这个问题,但我想避免这个问题——有没有办法将“NULL”值映射到Contact类


如果不能做到这一点,JPA中是否有一种机制,可以对记录集进行预筛选,使JPA相信字段不是空的,但其中写入了“Contact”?

您需要运行更新,并为数据库中具有空值的行分配正确的值。我还建议您修改数据库中的列定义,并为其设置默认值,以防止将来出现null


或者不要使用
@DiscriminatorColumn
。根据我的经验,它往往会增加更多的复杂性和错误。

不幸的是,正如我所说,它是一个遗留数据库,我几乎无法控制它,我只能以只读方式访问它。进行更新将意味着无休止的重新测试周期。但是我想知道更多关于您使用@DiscriminatorColumn的经验-您会推荐什么?我建议使用尽可能干净的实体,将一对一映射到一个表。当您仅限于现有的、不灵活的数据模型时,尤其如此
@Inheritation
并不能真正提供使用简单实体和属性无法实现的任何功能。尝试将关系数据结构转换为非关系数据结构(多态继承结构)是我从未热衷过的事情。我完全同意-但您应该看到这个数据库。。。它有一个字段用于保存字符串,同一表中的另一个字段用于保存同一字符串的大写版本。除主键外,所有其他字段都必须“解释”,例如,如果字段是“联系人”,则为电话号码;如果字段是“资产”,则为序列号。使用表继承允许我正确处理这两种情况——但是网络上一定有配置错误的客户端设置了null——所以即使我更新表,我担心null也会再次发生
@Entity
@DiscriminatorValue(value = "Contact")
public class Contact extends Record {...}
@Entity
@DiscriminatorValue(value = "Asset")
public class Asset extends Record {...}