【问题标题】:Cannot override default id column spring data JPA无法覆盖默认 id 列弹簧数据 JPA
【发布时间】:2015-05-26 17:09:49
【问题描述】:

我最近重构了我们的数据库架构,使每个表中的 id 列的格式为“tableName”+ ID,即“SettingsID”,而不是所有表中的“id”。现在,当我尝试从其中一个表中获取任何内容时,我的 spring-data 后端正在中断。它抱怨有一个“无效的列名'id'”。我假设我需要做的是将 ID 列的新名称映射到 spring data 想要成为 id 列的内容,但到目前为止我还没有成功。

我认为唯一需要的配置将发生在我的实体对象中。这是我的 Settings.java 实体对象类:

@Entity
@Table(name = Settings.TABLE_NAME)
public class Settings extends AbstractPersistable<Long> {
public static final String TABLE_NAME = "SETTINGS";

@AttributeOverride(name = "id", column = @Column(name="settingsID"))
private long settingsID;

@Column(name = "CUSTOMERID")
private String customerID;

@Column(name = "MERCHANTID")
private String merchantID;
...
....
}

为了以防万一,(我不认为它确实如此)这是我在抛出此错误时调用的函数:

@Repository
public interface SettingsDAO extends CrudRepository<Settings, Long> {


/**
 * Finds the entry in the Settings table for a given customerID
 * @param customerID   The customerID to search for
 * @return             The settings object for the given customer ID
 */
Settings findOneByCustomerID(String customerID);

}

我得到的错误是(除了一般的休眠错误说它不能提取结果集)是

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'id'.

【问题讨论】:

    标签: java hibernate hibernate-mapping spring-data-jpa


    【解决方案1】:

    将此名称/值对添加到 application.properties 对我有用,而无需使用 AttributeOverride 注释

    spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
    

    【讨论】:

      【解决方案2】:

      查看this 帖子后,我意识到我不应该在字段上添加@AttributeOverride 注释,而是应该在类本身上添加。这样,spring data 就不会尝试双重映射 id 字段。我的新实体对象如下所示:

      @Entity
      @Table(name = Settings.TABLE_NAME)
      @AttributeOverride(name="id", column=@Column(name="SETTINGSID"))
      public class Settings extends AbstractPersistable<Long> {
      public static final String TABLE_NAME = "SETTINGS";
      
      
      @Column(name = "CUSTOMERID")
      private String customerID;
      
      @Column(name = "MERCHANTID")
      private String merchantID;
      ...
      

      请注意,现在没有 id 字段。

      【讨论】:

        猜你喜欢
        • 2019-03-17
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-25
        相关资源
        最近更新 更多