【问题标题】:@Transient in spring data doesn't work春季数据中的@Transient 不起作用
【发布时间】:2017-12-13 21:19:35
【问题描述】:

我有Settlement 实体

@Entity
@Table(name = "settlement")
public class Settlement {

    @ManyToOne
    @JoinColumn(name = "subscription_x_product_id")
    private ProductSubscription productSubscription;

ProductSubscription实体相关

@Entity
@Table(name = "subscriptionproduct")
public class ProductSubscription {
    @ManyToOne
    @JoinColumn(name = "product_id")
    private Product product;

Product实体相关

@Entity
public class Product {
    @Transient
    private String enabled;

Product 实体中,我有字段enabled,它用@org.springframework.data.annotation.Transient 注释。 我也有存储库

public interface SettlementRepository extends JpaRepository<Settlement, Integer>

当我调用SettlementRepository.findAll(); 时,它会给出异常Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'enabled'.

如何忽略从数据库加载的 enabled 字段?

【问题讨论】:

  • enabled的setter上你有注解吗?
  • @Jens 不,我在 setter 或 getter 上没有任何注释。

标签: java spring hibernate jpa spring-data


【解决方案1】:

我找到了解决方案,问题出在 Annotation @org.springframework.data.annotation.Transient 中,一旦我更改为 @javax.persistence.Transient,它就可以正常工作了。

【讨论】:

  • 我有同样的问题,但我从一开始就使用@javax.persistence.Transient 中的@Transient,但仍然没有成功。我保存实体并在返回的对象上调用 get 方法,并保留该值。你有没有发现别的东西?谢谢。
  • 对于更多的读者来说,注释实际上是有效的,但是当我在 @Transactional 测试中使用它时,spring 存储库似乎没有更新对象(保存的对象并从存储库具有相同的对象 ID)。所以该字段没有被写入数据库,但存储库仍在返回它,即使我调用 findOne 并将其分配给一个新变量。还是不知道怎么解决。
  • @fabioresner 你的实体有问题(对我来说,我有错误的 \@UniqueConstraint 名称),你必须在 xml 文件中定义这样的查询:
  • @fabioresner 检查这个答案:stackoverflow.com/a/42753469/5695421
猜你喜欢
  • 2015-02-27
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多