【问题标题】:Spring Data JPA with SQL Server giving error: Invalid object name 'Table_Name'带有 SQL Server 的 Spring Data JPA 给出错误:无效的对象名称'Table_Name'
【发布时间】:2019-04-27 18:52:00
【问题描述】:

我试图在我的Spring Boot 应用程序中的sql-server 数据库中保存一个对象列表,但是当我调用save 方法时出现异常。

2018-11-26 11:50:41.896  WARN 22082 --- [nio-8080-exec-2] o.h.e.j.s.SqlExceptionHelper             : SQL Error: 208, SQLState: S0002
2018-11-26 11:50:41.897 ERROR 22082 --- [nio-8080-exec-2] o.h.e.j.s.SqlExceptionHelper             : Invalid object name 'ticket'.

下面是正在使用的配置:

#SQL Server configurations
spring.datasource.url=jdbc:sqlserver://my.server.ip.address;databaseName=UH
spring.datasource.username=Test
spring.datasource.password=Test@123
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.show-sql=true
spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect

Model 看起来像:

@Entity(name = "Ticket")
public class Ticket {

    public Ticket() {

    }

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @Column(name = "ticket_id", nullable = false, length=200)
    private long ticket_id;

    @Column(name = "topic", nullable = false, length=200)
    private String topic;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<Tag> tag;

    @Column(name = "type", nullable = false, length=200)
    private String type;

    @Column(name = "brand", nullable = false, length=200)
    private long brand;

    @Column(name = "ticket_group", nullable = false, length=200)
    private long ticket_group;

    @Column(name = "priority", nullable = false, length=200)
    private String priority;

    @Column(name = "status", nullable = false, length=200)
    private String status;


    @Column(name = "created_date", nullable = false, length=200)
    private String created_date;

    @Column(name = "created_time", nullable = false, length=200)
    private String created_time;

    @Column(name = "channel", nullable = false, length=200)
    private String channel;

    // Getters & Setters....

}

我创建了Repository 类:

@Repository
public interface TicketRepository extends JpaRepository<Ticket, Long> {

}

最后是控制器:

@RestController
public class TicketController {


  @Autowired
  TicketRepository ticketRepository;

  @GetMapping("/tickets")
  public void saveTicketData() {

      List<Ticket> tickets = null;
      try {
            tickets = getAllTickets();  //some utility method
            ticketRepository.save(tickets);  // here exception occurs
        } catch (Exception e) {
            e.printStackTrace();
        }   
}

不知道这里出了什么问题。在 SQL Server 中保存对象列表的方法是否与在 MySQl 中不同?这适用于 MySQL,或者如果我切换到 Mongo。

任何帮助将不胜感激。

【问题讨论】:

  • 你能不能也展示一下你的实用方法。
  • erm,可以截图你的数据库架构/表吗?只是好奇您是否将名称设置为“db”...
  • 编辑了数据库名称。这正是我在 SQL Server 中创建的
  • @PoojaAggarwal:实用方法只不过是解析一些 JSON 并创建 Ticket 对象,填充票证字段并将其保存为集合并返回。

标签: java sql-server hibernate spring-boot spring-data-jpa


【解决方案1】:

在实体类中再添加一个注解@Table(name = "Ticket")

@Table(name = "Ticket") @Entity(name = "Ticket") public class Ticket {.....

【讨论】:

  • db中的表名是什么?根据操作系统,SQL Server 表名可能区分大小写。所以,请检查表名是小写ticket 还是Ticket。必须是ticket
  • 它托管在 Windows 上。表名是ticket
【解决方案2】:

Sqlserver 区分大小写,因此如果表名是 TICKET,它不会识别 Ticket 中的“i”字符。 你能检查一下表名是TICKET还是ticket。如果是 TICKET,那么试试这个注解。

@Table(name = "TICKET")
@Entity(name = "TICKET")

【讨论】:

    【解决方案3】:

    在我的情况下,表不是用 JPA 创建的。我们在外部创建表,然后完成所有其他操作,如插入选择。所以,由于表的缺席,我面临这个问题

    【讨论】:

      【解决方案4】:

      就我而言,我错过了以下设置:

      spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
      

      由于某种原因正在重新格式化表名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        • 2020-10-17
        • 2021-01-15
        • 1970-01-01
        • 1970-01-01
        • 2019-10-21
        • 1970-01-01
        相关资源
        最近更新 更多