标签: spring-data-jpa

Spring boot 生成错误的sql代码

我正在创建一个 POC,以便在我的下一个项目中使用 Spring Boot。现在我创建了一个休息服务,它将查询来自 MS sql server 数据库的所有数据。

我要查询的实体如下所示:

@Entity
@Table(name = "Item", schema = "materialManagement", uniqueConstraints = @UniqueConstraint(columnNames = {
        "companyID", "number" }))
public class Item implements java.io.Serializable {
//all variabels are placed here
}
Run Code Online (Sandbox Code Playgroud)

现在,当我为 Item 类创建存储库时:

public interface NoteRepository extends JpaRepository<Item, Long> {
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我自动连接 repo 并使用 findAll() 查询 repo:

@RestController
@RequestMapping("/api")
public class NoteController {
 @Autowired
    NoteRepository noteRepository;

    @GetMapping("/notes")
    public List<Item> getAllNotes() {
        return noteRepository.findAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我向控制器发送请求时,出现以下错误:

com.microsoft.sqlserver.jdbc.SQLServerException: 无效的对象名称“material_management.item”。

在数据库中确实没有 material_management 模式,只有 materialManagement。但是生成的模式从何而来?

我的 application.properties …

hibernate spring-data-jpa spring-boot

0
推荐指数
1
解决办法
1339
查看次数

带有命名列的 Spring 数据 JPA @Query 映射

我在 MySQL 中使用 Spring Boot 1.5 和 Spring Data JPA。我试图在单个表上运行一个简单的计数查询,但找不到比这更好的映射查询结果的方法。:

存储库:

public interface VehicleRepository extends JpaRepository<Vehicle, String> {
    @Query("select v.sourceModule as sourceModule, count(v) as vehicleCount from Vehicle v group by v.sourceModule")
    List<Object[]> sourceModuleStats();
}
Run Code Online (Sandbox Code Playgroud)

服务:

@Override
public List<SourceModuleStatDTO> getSourceModuleStats() {
    List<Object[]> objects = vehicleRepository.sourceModuleStats();

    return objects.stream()
            .map(o->SourceModuleStatDTO.from((String)o[0], (Long)o[1]))
            .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

我使用org.immutables,所以 DTO.:

@Value.Immutable
@JsonSerialize(as = ImmutableSourceModuleStatDTO.class)
@JsonDeserialize(as = ImmutableSourceModuleStatDTO.class)
public abstract class SourceModuleStatDTO {
    public abstract String sourceModule();
    public abstract long vehicleCount();

    public static SourceModuleStatDTO from(String sm, long …
Run Code Online (Sandbox Code Playgroud)

java spring jdbctemplate spring-data-jpa spring-boot

0
推荐指数
1
解决办法
2652
查看次数

如何在JPA SpringBoot中返回具有给定ID的类型的所有实例?

我正在尝试根据我提供的 ID 从数据库中返回(或获取)所有记录。我正在使用 JPA 并且我知道findAll()方法,但它返回没有任何条件的所有记录,我创建了一个自定义查询,它只从表中返回一个唯一值,但我想根据条件返回所有记录。

例如,findAllByUserID(String UserID)方法应该返回基于该记录的所有记录,UserID而不仅仅是一条记录。

我很感激任何帮助或建议。

谢谢

spring-data-jpa spring-boot

0
推荐指数
1
解决办法
1305
查看次数

Spring boot JPA 错误:无法处理托管/返回引用“defaultReference”:未从类型中找到返回引用属性

我有以下 3 个域模型对象,其中 appuser 的排名和训练状态如下。Get 调用在返回 JSON 对象的地方工作正常,但在 JPA 中添加模型对象时出现错误。

Cannot handle managed/back reference 'defaultReference': no back reference property found from type [simple type, class com.springboot.model.Rank
Run Code Online (Sandbox Code Playgroud)

`

        package com.springboot.model;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import static javax.persistence.GenerationType.IDENTITY;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;

    import com.fasterxml.jackson.annotation.JsonBackReference;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonManagedReference;

    @Entity
    @Table(name = "app_user", catalog = "testdb")
    public class AppUser implements java.io.Serializable {

        private Integer id;
        private Rank rank;
        private Trainingstatus trainingstatus;
        private String name;
        private …
Run Code Online (Sandbox Code Playgroud)

jpa jackson spring-data-jpa spring-boot spring-rest

0
推荐指数
1
解决办法
3345
查看次数

Spring Data JPA:使用 Pageable 但使用实体的一组特定字段

我正在使用Spring Data2.0.6.RELEASE。

我正在为性能和演示目的进行分页。这里关于性能我说的是如果我们有很多记录最好通过页面显示它们

我有以下内容并且工作正常:

interface PersonaDataJpaCrudRepository extends PagingAndSortingRepository<Persona, String> {
}
Run Code Online (Sandbox Code Playgroud)

@Controller与正常工作:

@GetMapping(produces=MediaType.TEXT_HTML_VALUE)
public String findAll(Pageable pageable, Model model){
Run Code Online (Sandbox Code Playgroud)

通过Thymeleaf我能够应用分页。因此,直到这里目标已经完成。

注:Persona类都被注解JPA@EntityId,等)

现在我关心以下问题:即使分页工作Spring Data的记录数量大约是多少,每条记录的内容呢?。

我的意思是:让我们假设Persona类包含20场(考虑为您的应用程序,你想要的任何实体),从而为基于视图中的html其中一个报告只使用4个领域(ID,名字,姓氏,日期),因此,我们有16个不必要的字段对于内存中的每个实体

我尝试了以下方法:

interface PersonaDataJpaCrudRepository extends PagingAndSortingRepository<Persona, String> {

    @Query("SELECT p.id, id.nombre, id.apellido, id.fecha FROM Persona p")
    @Override
    Page<Persona> findAll(Pageable pageable);

}
Run Code Online (Sandbox Code Playgroud)

如果我在里面做一个简单的打印,@Controller它会失败关于以下内容:

java.lang.ClassCastException: 
[Ljava.lang.Object; cannot be …
Run Code Online (Sandbox Code Playgroud)

jpa spring-data spring-data-jpa

0
推荐指数
1
解决办法
1910
查看次数

Spring hibarnate 错误:通过 JDBC 语句执行 DDL 时出错

我真的需要帮助,我搜索了我在 StackOverflow 上找到的所有问题,但没有任何效果,或者我的问题没有答案。我以前从未使用过休眠,我不知道我做错了什么。我生成了表格,但插入时遇到了问题。

有 3 个表,名称为用户角色和注释。注意和用户工作没有问题,但是当我使用相同的方法创建角色时,它会出现该错误:

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:440) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:315) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:155) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:312) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:462) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) [spring-orm-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) [spring-orm-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) [spring-orm-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) [spring-orm-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) [spring-orm-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1758) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1695) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at …
Run Code Online (Sandbox Code Playgroud)

java mysql spring hibernate spring-data-jpa

0
推荐指数
1
解决办法
7607
查看次数

Spring Boot:错误:提交响应后无法调用sendError()

我收到此错误。 响应提交后无法调用 sendError() 有人能帮我找出原因吗?

    @Entity
    public class Product {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;

        @OneToOne(
                fetch = FetchType.LAZY,
                cascade = CascadeType.ALL
        )
        @JoinColumn(name = "details_id")
        private Details details;
//Getters and setters left out for brevity
    }


@Entity
public class Details {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private String description;
    private float price;
    private float discount;
    @OneToOne(mappedBy = "details")
    private Product product;
}


@RestController
public class ProductController {
    @Autowired
    ProductRepository productRepository;

    @GetMapping("/getAllProducts")
    public Iterable<Product> …
Run Code Online (Sandbox Code Playgroud)

spring jpa spring-data-jpa spring-boot

0
推荐指数
1
解决办法
1317
查看次数

如何从 jpa-repository 更改方法名称?

spring+jpa(repositories) 实体有应用:

@Entity
@Getter
@Setter
@NoArgsConstructor
public class User{
  private int id;
  private String name;
  private String surname;
  private int age;
}
Run Code Online (Sandbox Code Playgroud)

因此,我的存储库如下所示:

@Repository
public interface UserRepository extends CrudRepository<User, Integer>{
  public List<User> findUsersByNameAndAge(String name, int age);
  public List<User> findUsersByNameAndSurname(String name, String surname);
}
Run Code Online (Sandbox Code Playgroud)

在我真正的生产代码中,参数太多,所以这个方法名太长而且不舒服。有没有办法从长方法名称中创建舒适的选项,例如仅查找?

spring repository spring-data-jpa

0
推荐指数
1
解决办法
2153
查看次数

Hibernate 5.2.17:ORA-01797:此运算符后必须跟 ANY 或 ALL

我有一个 Oracle 18.4.0 XE 数据库,我试图从 Hibernate 5.2.17 实现的 JPA 2.1 访问它。

我有ManyToMany两个实体之间的连接:

public class PermissionEntity implements Serializable {
    private static final long serialVersionUID = -3862680194592486778L;

    @Id
    @GeneratedValue
    private Long id;

    @Column(unique = true)
    private String permission;

    @ManyToMany
    private List<RoleEntity> roles;
}
Run Code Online (Sandbox Code Playgroud)
public class RoleEntity implements Serializable {
    private static final long serialVersionUID = 8037069621015090165L;

    @Column(unique = true)
    private String name;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles")
    private List<PermissionEntity> permissions;
}
Run Code Online (Sandbox Code Playgroud)

尝试在 …

java spring hibernate spring-data-jpa oracle18c

0
推荐指数
1
解决办法
1277
查看次数

更新 Spring Data 创建一个新记录,以防主键无效

我在我的应用程序中使用 Spring Data 并调用“save” Repository 方法来插入新记录或更新现有实体,如果我传递ID (Primary key)

但是我注意到,当我传递一个在我的数据库中不存在的ID 时,插入了一个新记录,我该如何防止这种行为?

在这种情况下,我需要抛出异常。

谢谢

spring-data spring-data-jpa spring-boot jhipster

0
推荐指数
1
解决办法
765
查看次数