Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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 Spring引导的Javers返回@Transient字段的实体\u实例\u和\u NULL \u ID_Java_Spring Boot_Javers - Fatal编程技术网

Java Spring引导的Javers返回@Transient字段的实体\u实例\u和\u NULL \u ID

Java Spring引导的Javers返回@Transient字段的实体\u实例\u和\u NULL \u ID,java,spring-boot,javers,Java,Spring Boot,Javers,我刚刚开始在我的应用程序中使用Javers,但我有一些实体被注释为@Transient,我认为Javers会忽略它们,但不会:(,相反,它会引发一个异常: JaversException ENTITY_INSTANCE_WITH_NULL_ID: Found Entity instance 'ProductData' with null Id-property 'id' 你们知道有没有办法忽略这些瞬态场 他们说@Transient注释是@DiffIgnore的同义词。但我不知道这是否只与比较有

我刚刚开始在我的应用程序中使用Javers,但我有一些实体被注释为@Transient,我认为Javers会忽略它们,但不会:(,相反,它会引发一个异常:

JaversException ENTITY_INSTANCE_WITH_NULL_ID: Found Entity instance 'ProductData' with null Id-property 'id'
你们知道有没有办法忽略这些瞬态场

他们说@Transient注释是@DiffIgnore的同义词。但我不知道这是否只与比较有关,还是与审计流程有关

这是我的密码:

@Entity
public class ProductExternal extends AbstractEntity implements ExternalEntity {

    @Transient
    private ProductData productData;

    @NotNull
    @Column(unique=true)
    private Long externalId;

    public ProductExternal() { }

    //get set
}
--

父类

@MappedSuperclass
public abstract class AbstractEntity implements Serializable  {

    public AbstractEntity() {}

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected Long id;

    @Version
    @Column(columnDefinition = "bigint default '0'")
    protected Long version;

    //get set

}
您的类和映射(注释)似乎很好。例外情况是:

Found Entity instance 'ProductData' with null Id-property 'id'
因此,您正试图向Javers提交一个ProductData类的对象,该对象具有null
id
字段。显然,这是不可能的。这是Hibernate的
@GeneratedValue
魔术的一个常见问题。您的字段首先为null,然后在调用DB sequence next val之后,Hibernate将对其进行更新


通常,在持久化对象后,您应该调用Javers
commit()
。当使用Javers的自动审核特性时,可以很容易地实现这一点:
@JaversAuditable
@JaversSpringDataAuditable
。它们应用于正确的阶段,并调用Javers
commit()
供您参考。请参阅。

但我的对象是一个临时对象,它没有Id,即使在Hibernate提交之后,Hibernate也会忽略它。因此,如果我们遵循Hibernate的流程,就没有办法设置Id属性。作为一个回文解决方案,我所做的是设置一个假Id,但如果我可以忽略所有@Transient字段,那将是非常棒的。如果没有,我将检查此请求是否已解决,如果可能或不可能,我只需要一个最终答案。顺便说一句,我已经在使用
@JaversSpringDataAuditable
你的意思是你是否可以忽略@Transient注释?是的,忽略正在审核的@Transient字段。Javers会忽略它们,它们与我无关。没有人需要忽略它们重新指定字段?@OtávioAugustoJunior,Javers确实忽略了带有
@Transient
ann的字段和getter,这非常符合逻辑。我没有改变上面代码中的任何内容,如果我没有在我的Transient对象上设置假ID,我会得到带有空ID属性'ID'错误的
。即使设置ID,Javers更改的结果也是错误的:。它不会忽略字段。我将调试Javers并尝试理解框架,也许我还需要做其他事情。Tks。
Found Entity instance 'ProductData' with null Id-property 'id'