我试图通过使用spring data JPA一对一关联来连接两个表并显示其结果。下面我要添加我的模型和存储库类,我的第一个模型类用户是,
@Entity
@Table(name = "users")
public class Users implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "username")
public String username;
@Column(name = "password")
public String password;
@Column(name = "privid")
public Integer privid;
@OneToOne()
@JoinColumn(name="join_privillage")
private Privillages priviJoin;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getPrivid() {
return privid;
}
public void setPrivid(Integer privid) {
this.privid = privid;
}
public Privillages getPriviJoin() {
return priviJoin;
}
public void setPriviJoin(Privillages priviJoin) {
this.priviJoin = priviJoin;
}
protected Users() {
}
public Users(String username, String password, Integer privid) {
this.username = username;
this.password = password;
this.privid = privid;
}
@Override
public String toString() {
return String.format("Users[id=%d, username='%s', password='%s']", id,
username, password);
}
}
而我需要加入的下一个模型类是:
@Entity
@Table(name = "privillages")
public class Privillages implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer id;
@Column(name = "privid")
public Integer privid;
@Column(name = "privi_name")
public String privi_name;
@OneToOne(fetch=FetchType.LAZY, mappedBy="priviJoin")
public Users user;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getPrivid() {
return privid;
}
public void setPrivid(Integer privid) {
this.privid = privid;
}
public String getPrivi_name() {
return privi_name;
}
public void setPrivi_name(String privi_name) {
this.privi_name = privi_name;
}
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
public Privillages() {
}
public Privillages(Integer privid, String privi_name ) {
this.privid = privid;
this.privi_name = privi_name;
}
}
public interface UsersRepository extends CrudRepository<Users, Integer> {
@Query("SELECT u.username FROM Users u inner join p.privi_name FROM
Privillages p")
List<Users> findByUsername();
}
“意外标记:来自第1行附近的第74列[SELECT u.username FROM com.central.model.users u inner join p.privi_name FROM com.central.model.privillages p]”。
而且
“对方法public abstract java.util.List com.central.Repository.UsersRepository.FindByUserName()!的查询验证失败。”
如果您希望获得整个实体,并且用户已获得特权,请尝试:
@Query("SELECT u FROM Users u inner join fetch u.priviJoin")
更新
@Query("SELECT u.username,p.privi_name FROM Users u inner join u.priviJoin p")
List<Object[]> findByUsername();
在这种情况下,您也不需要fetch
。
比如我们有一个用户表,另外有一个个人资料表,他们之间的关联就是一对一的关系。 定义 一对一关联会用到的注解: @OneToOne、@JoinFrom、@JoinTo、@AutoSelect、@AutoInsert、@AutoUpdate、@AutoSave、@AutoDelete 如 imi-demo 中代码所示,定义了一个$ex属性,这个属性关联UserEx模型。 User中id与UserEx中
一对一关联 版本 新增功能 5.1.2 增加selfRelation方法定义当前关联为自关联 关联定义 定义一对一关联,例如,一个用户都有一个个人资料,我们定义User模型如下: <?php namespace app\index\model; use think\Model; class User extends Model { public function profile()
问题内容: 我有一个使用联接表建模的一对多关系: 这些表应该模拟一个t1与多个t2的关系。使用JPA为这些表建模的正确方法是什么? 问题答案: 一个T1到多个T2的典型表是在T2上有一个指向T1的外键。通常不需要T1_T2表。 这样,JPA结构将是一对多的,可能是双向的。 可能会有一些安排,以使您描述的结构起作用。您可以更改T1_T2: 在T2上添加唯一约束(以便仅允许一个T2) 那真的是你想要的
比如我们有一个用户表,每个用户都可以发布文章,用户和文章就是一对多的关系。 当然imi-demo里一对多的例子选的不好,不过不重要,理解意思就行。 定义 一对多关联会用到的注解: @OneToMany、@JoinFrom、@JoinTo、@AutoSelect、@AutoInsert、@AutoUpdate、@AutoSave、@AutoDelete 如 imi-demo 中代码所示,UserWi
一对多关联 关联定义 一对多关联的情况也比较常见,使用hasMany方法定义,参数包括: hasMany('关联模型','外键','主键'); 除了关联模型外,其它参数都是可选。 关联模型(必须):模型名或者模型类名 外键:关联模型外键,默认的外键名规则是当前模型名+_id 主键:当前模型主键,一般会自动获取也可以指定传入 例如一篇文章可以有多个评论 <?php namespace app\ind
比如我们有一个用户表,一个团队表,他们和头像表相关联。 mysql> desc tb_user; +----------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------