Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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 子实体在JPA中半持久化的可能场景是什么?_Java_Spring_Jpa_Eclipselink - Fatal编程技术网

Java 子实体在JPA中半持久化的可能场景是什么?

Java 子实体在JPA中半持久化的可能场景是什么?,java,spring,jpa,eclipselink,Java,Spring,Jpa,Eclipselink,我在使用EclipseLink和Spring@Transascional注释 课程如下: @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "type") public abstract class Base{ Long x; Long y; } @Entity @DiscriminatorValue("child") public class C

我在使用EclipseLink和Spring@Transascional注释

课程如下:

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Base{
    Long x;
    Long y;
}

@Entity
@DiscriminatorValue("child")
public class Child extends Base{   
    Long z;
    Long w;   
}
@Transactional
public void doSomething(){
    if(somethingWrong){
        throw new MyCheckedException();
    }

    entityManager.persist(new Child(1, 2, 3, 4));
}
 id | type  | x | y |  z   |  w   |
-----------------------------------
 7  | child | 1 | 2 | NULL | NULL |
方法如下:

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Base{
    Long x;
    Long y;
}

@Entity
@DiscriminatorValue("child")
public class Child extends Base{   
    Long z;
    Long w;   
}
@Transactional
public void doSomething(){
    if(somethingWrong){
        throw new MyCheckedException();
    }

    entityManager.persist(new Child(1, 2, 3, 4));
}
 id | type  | x | y |  z   |  w   |
-----------------------------------
 7  | child | 1 | 2 | NULL | NULL |
一旦我在DB中发现以下内容:

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Base{
    Long x;
    Long y;
}

@Entity
@DiscriminatorValue("child")
public class Child extends Base{   
    Long z;
    Long w;   
}
@Transactional
public void doSomething(){
    if(somethingWrong){
        throw new MyCheckedException();
    }

    entityManager.persist(new Child(1, 2, 3, 4));
}
 id | type  | x | y |  z   |  w   |
-----------------------------------
 7  | child | 1 | 2 | NULL | NULL |
我无法重现这种行为。这怎么可能

关于
z
w
的一些附加信息:
z
是一些刚从DB实体中提取的id值
w
是不允许为空的其他值。此外,如果调用
persist
之前
w
z
中的一个将为
null
,则会抛出
NullPointerException

提前感谢。

您确定DB中的这一行是用相同的代码生成的吗?它可以是手动插入的一行,甚至是以前版本代码中的一行……你好,Gaël!所以情况是不可能的-代码是新的,没有人可以手动插入这一行打开日志记录到finest,并且您可能希望临时更改两列中的一列,使其具有NOTNULL约束,以便在问题insert上引发异常,以准确显示这是从代码中的何处引起的。请注意,您提供的代码不完整-Child没有按照您的预期扩展基类。我确信这是一个剪切粘贴错误,但实际代码中容易忽略的东西可能导致或与此相关。嗨@Chris,谢谢回复!打开日志记录并设置NOTNULL约束也是一个好主意,这个步骤将帮助我识别到底发生了什么。但现在我甚至不能复制这种行为,需要帮助找到这种行为的可能来源。完整代码令人困惑,很抱歉输入错误。但
z
是刚刚从DB实体中提取的
id
-值
w
是不允许为空的其他值。此外,如果调用
persist
之前
w
z
中的一个将
null
,则会抛出
NullPointerException
。您确定DB中的此行是用相同的代码生成的吗?它可以是手动插入的一行,甚至是以前版本代码中的一行……你好,Gaël!所以情况是不可能的-代码是新的,没有人可以手动插入这一行打开日志记录到finest,并且您可能希望临时更改两列中的一列,使其具有NOTNULL约束,以便在问题insert上引发异常,以准确显示这是从代码中的何处引起的。请注意,您提供的代码不完整-Child没有按照您的预期扩展基类。我确信这是一个剪切粘贴错误,但实际代码中容易忽略的东西可能导致或与此相关。嗨@Chris,谢谢回复!打开日志记录并设置NOTNULL约束也是一个好主意,这个步骤将帮助我识别到底发生了什么。但现在我甚至不能复制这种行为,需要帮助找到这种行为的可能来源。完整代码令人困惑,很抱歉输入错误。但
z
是刚刚从DB实体中提取的
id
-值
w
是不允许为空的其他值。此外,如果在调用
persist
之前
w
z
中的一个将
null
,则会抛出
NullPointerException