我有这两个简单的实体Something和Property.该Something实体与多对一关系Property,因此当我创建一个新Something行时,我分配一个现有的Property.
东西:
@Entity
@Table(name = "something")
public class Something implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "owner")
private String owner;
@ManyToOne
private Property property;
// getters and setters
@Override
public String toString() {
return "Something{" +
"id=" + getId() +
", name='" + getName() + "'" +
", owner='" + …Run Code Online (Sandbox Code Playgroud) 我有一个这样的实体:
@Entity
public class Person {
@Id
private Long id;
private String firstName;
// Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
在id没有自动生成的,而是由用户决定。
我有第二个这样的实体:
@Entity
public class PersonDetail {
@Id
@OneToOne
private Long id; // should be referred to id of Person entity
// or maybe private Person person; ???
private String language;
private Integer age;
// Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
同样在第二个实体中,id不会自动生成。
我想建立一个@OneToOne关系,我希望idof PersonDetail是of 的主键,PersonDetail但同时它必须是该Person实体(id字段)的外键。
Spring JPA / Hibernate注释是否可能? …
我有Spring Tool Suite v3.8.3及其组件Spring IDE v3.8.4.201702201939-CI-B1500.我也是Gradle Buildship v2.0.
我用JHipster v4.0.5创建了一个项目,但无法导入它.(在Gradle Buildship 2之前没有错误).低于错误:
由于引用的Gradle构建中的配置不受支持,因此Gradle项目与工作区同步失败.'C:\ ws\Testa'中的项目不能命名为'testa',因为它直接位于工作区根目录下.如果重命名了这样的项目,Eclipse将移动容器目录.要解决此问题,请将项目移出工作区根目录或将其配置为名称"Testa".
org.eclipse.buildship.core.UnsupportedConfigurationException: Project at 'C:\ws\Testa' can't be named 'testa' because it's located directly under the workspace root. If such a project is renamed, Eclipse would move the container directory. To resolve this problem, move the project out of the workspace root or configure it to have the name 'Testa'.
at org.eclipse.buildship.core.workspace.internal.DefaultWorkspaceOperations.validateProjectName(DefaultWorkspaceOperations.java:190)
at org.eclipse.buildship.core.workspace.internal.ProjectNameUpdater.checkProjectName(ProjectNameUpdater.java:107)
at org.eclipse.buildship.core.workspace.internal.ProjectNameUpdater.ensureProjectNameIsFree(ProjectNameUpdater.java:71)
at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.addNewEclipseProjectToWorkspace(SynchronizeGradleBuildOperation.java:274)
at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeNonWorkspaceProject(SynchronizeGradleBuildOperation.java:258)
at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeGradleProjectWithWorkspaceProject(SynchronizeGradleBuildOperation.java:182)
at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.access$000(SynchronizeGradleBuildOperation.java:106)
at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation$1.run(SynchronizeGradleBuildOperation.java:141) …Run Code Online (Sandbox Code Playgroud) 我想使用 Spring Data Projection 技术来从表中仅提取一些字段(而不是表的所有字段)。
如文档(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections)中所述,我创建了一个简单的界面,例如:
interface NamesOnly {
String getFirstname();
String getLastname();
}
Run Code Online (Sandbox Code Playgroud)
但是我在使用它时遇到了一些问题。
问题1:
首先,我想使用该名称findAll()来创建一个查询,该查询查找只有两个字段(firstName和lastName)的所有行:
@Repository
public interface PersonaRepository extends JpaRepository<Persona, Long> {
List<NamesOnly> findAll();
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我有这些错误(可能是因为findAll()是 的一种方法JpaRepository):
- 实现 org.springframework.data.jpa.repository.JpaRepository.findAll
- 返回类型与 JpaRepository.findAll() 不兼容
问题2:
好的,所以我尝试将方法的名称更改为findAllOnlyNames():
@Repository
public interface PersonaRepository extends JpaRepository<Persona, Long> {
List<NamesOnly> findAllOnlyNames();
}
Run Code Online (Sandbox Code Playgroud)
但现在我有这个错误:
引起:org.springframework.data.mapping.PropertyReferenceException:找不到类型角色的属性 findAllOnlyNames!
因为 Spring 尝试从名称创建查询。
1)是否可以重用方法名称findAll()而不会出现 JpaRepository 问题?
2)是否可以从方法名称关闭查询创建(仅适用于某些查询,不适用于所有项目或存储库)?
我已经实现了一个我的自定义 Spring 存储库,它在输入中接收一个org.springframework.data.domain.Pageable对象。此Pageable对象具有以下排序属性(例如):id: DESC,name: ASC.
我需要将pageable.getSort()属性转换为 aList<Order>以便为该criteriaQuery.orderBy(List<Order>)方法设置顺序。
为了检索分页结果,我使用了new PageImpl将pageable对象传递给它的方法,但这不管理排序。
TypedQuery<Entity> typedQuery = entityManager.createQuery(criteriaQuery);
typedQuery.setFirstResult(pageable.getOffset());
typedQuery.setMaxResults(pageable.getPageSize());
Page<Entity> page = new PageImpl<Entity>(typedQuery.getResultList(), pageable, typedQuery.getMaxResults());
return page;
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?谢谢,安德里亚
java ×3
jpa ×3
hibernate ×2
criteria-api ×1
eclipse ×1
gradle ×1
one-to-one ×1
persistence ×1
spring ×1
spring-data ×1