我使用Spring 1.4.0,Spring数据作为存储层,Hibernate用于JPA。
当我在不想持久化的实体字段上使用org.springframework.data.annotation.Transient注释时,它不起作用。
当我使用javax.persistence.Transient时,它按预期工作(每个注释都来自javax.persistence包)。
我对这些文件做了很多阅读,但却找不出原因。请帮助我理解不同之处,谢谢。
更新
从下面的注释和答复中,我将@Id和@瞬态从javax.persistence包更改为org.springframework.data.annotation,它仍然会产生如下错误:
导致: org.springframework.beans.factory.BeanCreationException:错误创建名称为“entityManagerFactory”的bean类路径资源init方法的org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class:调用失败;嵌套异常为org.hibernate.AnnotationException:没有为实体: com.xxx.domain.entities.PriceScheduleEntity指定的标识符
我想我需要改变所有的注释,包括@Column,@Entity,等等。到相同的供应商/提供者/包以使其工作。JPA和spring的注释不能混合吗?我以后再试着更新。
发布于 2017-07-13 12:09:31
Springs只有在Springs进行映射时才与@Transient相关,例如在Springs中。对于Spring,您应该使用javax.persistence.Transient注释,因为JPA (或它的实现)执行映射,而这些注释显然会忽略Spring注释。
发布于 2016-09-21 05:29:21
如果您的类中有一个不打算持久化的属性。必须使用@Transient注释或<transient>元素标记任何此类非持久字段。
根据@Transient在javax.persistence.Transient中的文档-
此注释指定属性或字段不是持久的。它用于注释实体类、映射超类或可嵌入类的属性或字段。
javax.persistence.transient将确保Hibernate在将其保存到数据库时忽略该特定字段。
尝试将实体上的@Id注释从javax.persistence.Id更改为org.springframework.data.annotation.Id并查看。希望它能成功。
https://stackoverflow.com/questions/39607518
复制相似问题