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

hibernate一对多注释无效列名

羊舌琛
2023-03-14

我有两个表:人员和帐户(一对多关系)。

@Entity
@Table(name="persons")
public class Person {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
    private String name;
    private String username;
    private String password;
    private String country;
    private boolean admin;

    @OneToMany(mappedBy="person")
    @Cascade({CascadeType.ALL})
    private Set<Account> accounts;

    public Person(String name, String username, String password, String country, boolean admin) {
        this.name = name;
        this.username = username;
        this.password = password;
        this.country = country;
        this.admin = admin;
    }

    public Person(){ }

    //getters and setters
}
@Entity
@Table(name="accounts")
public class Account {

    @Id
    @Column(name="accountId")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int accountId;
    private int balance;
    private String currency;

    @ManyToOne
    @JoinColumn(name="id")
    private Person person;

    public Account(int balance, String currency) {
        this.balance = balance;
        this.currency = currency;
    }

    private Account(){ }

    //getters and setters
}
CREATE TABLE persons(
    id int IDENTITY(1,1) PRIMARY KEY NOT NULL,
    name nvarchar(30) NOT NULL,
    username nvarchar(30) NOT NULL,
    password nvarchar(30) NOT NULL,
    country nvarchar(30) NOT NULL,
    admin bit NOT NULL
);

CREATE TABLE accounts(
    accountId int IDENTITY(10000,1) PRIMARY KEY NOT NULL,
    balance int NOT NULL,
    currency nvarchar(5) NOT NULL,
    userId int NOT NULL foreign key references persons(id)
);
    Person person = new Person("Maurice","vvvvv","ccccc", "France", true);
    this.personService.addPerson(person);
    Account account1 = new Account(1000, "eur");
    Account account2 = new Account(700, "gbp");
    account1.setPerson(person);
    account2.setPerson(person);
    this.accountService.addAccount(account1);
    this.accountService.addAccount(account2);

这不是我第一次使用一对多关系,但我以前没有遇到过这个错误。

完整的StackTrace:

共有1个答案

齐承运
2023-03-14

@joincolumn(Name=“id”)应为@joincolumn(Name=“userid”)

因为userid用作Accounts表中的外键

 类似资料:
  • 我有两个不同的表,Person表和Employee表。我需要这两者之间的一对一映射。Employee表的emp_id引用Person表的person_id。在使用注释编写映射方面我需要一些帮助

  • 我需要帮助在java类中为这些关系表创建映射Hibernate注释(一对一): 有人能帮我吗?谢谢你。

  • 我想使用联接表在两个表之间建立一对多关系。 这就是为什么我想使用联接表: Hibernate单向一对多关联-为什么连接表更好 最后,我想使用Hibernate注释来执行此操作。 我找到了一些使用xml映射实现这一点的示例,但没有使用注释。 我相信这将是如何创建表需要

  • 问题内容: 我偶然发现了在Oracle DB中锁定行的问题。锁定的目的是防止一个以上的事务从DB读取数据,因为该数据会影响新数据的生成并在事务方面发生更改。 为了进行锁定,我将@Lock注释放在SpringData find方法上,该方法检索参与事务的数据。 实施此代码后,我得到日志消息 此外,它没有作用和原因 使用实体管理器重写锁时可以解决该问题 要么 该问题未在MariaDB(MySQL)上出

  • 问题内容: 我有以下带注释的Hibernate实体类: 我的意图是在Cat和Kitten之间建立双向的一对多/多对一关系,Kitten是“拥有方”。 我想发生的事情是,当我创建一个新的Cat,然后是一个引用该Cat的新 小猫时,我Cat上的这组小猫应该包含新的Kitten 。但是,在以下测试 中不会发生这种情况 : 即使在重新查询Cat之后,集合仍然为空: 我在这里对Hibernate期望过高吗?

  • 我的表的结构Product的列为productId,poductName和productPrice类别的列为categoryId,categoryName和categoryproducts的列为categoryId和productId