我正在创建一个 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 …
我在 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) 我正在尝试根据我提供的 ID 从数据库中返回(或获取)所有记录。我正在使用 JPA 并且我知道findAll()方法,但它返回没有任何条件的所有记录,我创建了一个自定义查询,它只从表中返回一个唯一值,但我想根据条件返回所有记录。
例如,findAllByUserID(String UserID)方法应该返回基于该记录的所有记录,UserID而不仅仅是一条记录。
我很感激任何帮助或建议。
谢谢
我有以下 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) 我正在使用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(@Entity,Id,等)
现在我关心以下问题:即使分页工作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) 我真的需要帮助,我搜索了我在 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) 我收到此错误。 响应提交后无法调用 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(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)
在我真正的生产代码中,参数太多,所以这个方法名太长而且不舒服。有没有办法从长方法名称中创建舒适的选项,例如仅查找?
我有一个 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)
尝试在 …
我在我的应用程序中使用 Spring Data 并调用“save” Repository 方法来插入新记录或更新现有实体,如果我传递ID (Primary key)。
但是我注意到,当我传递一个在我的数据库中不存在的ID 时,插入了一个新记录,我该如何防止这种行为?
在这种情况下,我需要抛出异常。
谢谢
spring-data-jpa ×10
spring-boot ×6
spring ×5
hibernate ×3
java ×3
jpa ×3
spring-data ×2
jackson ×1
jdbctemplate ×1
jhipster ×1
mysql ×1
oracle18c ×1
repository ×1
spring-rest ×1