当前位置: 首页 > 知识库问答 >
问题:

通过一对一关联连接spring data jpa表

水焱
2023-03-14

我试图通过使用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()!的查询验证失败。”

共有1个答案

莫飞翮
2023-03-14
  • 您在查询中使用了一个投影,但期望得到一个整个实体。
  • 而且您的连接方式错误,使用了数据库列名而不是映射的字段名。
  • 您正在使用两次FROM..

如果您希望获得整个实体,并且用户已获得特权,请尝试:

@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 | +------