我有一个查询工厂,它将列名作为属性,以便搜索该列.现在我将列的名称作为字符串传递,因此它是硬编码的.如果列的名称在实体的注释中发生更改,则"隐藏的依赖项"会中断.
在jpa中是否有一种方法可以检索列的真实名称并在编译时将其提供,因此我可以在查询中使用它?
我总是确定(不知道为什么)最好在变量中添加注释,但在浏览Hibernate文档时http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity -hibspec-collection我注意到他们倾向于注释方法.所以我应该在方法之前添加注释,如下所示:
@Entity
public class Flight implements Serializable {
private long id;
@Id @GeneratedValue
public long getId() { return id; }
public void setId(long id) { this.id = id; }
}
Run Code Online (Sandbox Code Playgroud)
或者这样做更好:
@Entity
public class Flight implements Serializable {
@Id @GeneratedValue
private long id;
public long getId() { return id; }
public void setId(long id) { this.id = id; }
}
Run Code Online (Sandbox Code Playgroud)
或者也许没有区别?
我是Spring Boot和JPA的新手。我看过在字段声明上添加JPA注释的示例,例如:
@Entity
public class Fizz {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// other fields
public Fizz(Long id) {
super();
setId(id);
}
// setter defined here
public Long getId() {
return this.id;
}
}
Run Code Online (Sandbox Code Playgroud)
...以及在吸气剂上添加相同批注的示例,如下所示:
@Entity
public class Fizz {
private Long id;
// other fields
public Fizz(Long id) {
super();
setId(id);
}
// setter defined here
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return this.id;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道它们在语义上是否等效,或者是否有不同的用例,您会选择其中一种。我问是因为我实际上是在Groovy中编写我的Spring Boot / JPA应用程序,而您通常不定义getter:
@Canonical
@Entity
class Fizz { …
Run Code Online (Sandbox Code Playgroud) 我有一些桌子:
PROFIL:id_profil,...
体验:id_experience,id_profil#,...
COMPETENCE_LEVEL:id_competence_level,级别,...
一个PROFIL可以具有很多经验和COMPETENCE_LEVEL。
一个经验可以有很多COMPETENCE_LEVEL。
一个COMPETENCE_LEVEL涉及到很多经验。
因此,对我而言,这是EXPERIENCE和COMPETENCE_LEVEL之间的(np)ManyToMany
关系。
我试过了:
PROFIL.java:
@Entity
@Table(name="profil")
public class Profil {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id_profil")
private Long idProfil;
public Profil() {
super();
}
public Long getIdProfil() {
return idProfil;
}
public void setIdProfil(Long idProfil) {
this.idProfil = idProfil;
}
@Override
public String toString() {
//[...]
}
}
Run Code Online (Sandbox Code Playgroud)
EXPERIENCE.java:
@Entity
@Table(name="experience")
public class Experience {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id_experience") …
Run Code Online (Sandbox Code Playgroud)