[英]Problem with primary keys Java Hibernate?
我正在使用 Hibernate 和 Java 來實現數據庫。
我創建了以下兩個注釋:
@Entity public class Cargo implements Serializable{
@Id
@GeneratedValue
private Long id;
private String cargo;
@OneToOne(mappedBy="cargo")
private Funcionario funcionario;
}
和
@Entity public class Funcionario implements Serializable{
@Id @GeneratedValue private Long id;
private String nome;
private String sexo;
private String telefone;
@OneToOne
private Cargo cargo;
}
然后我嘗試使用以下代碼插入數據:
EntityManagerFactory factory = Persistence.createEntityManagerFactory("BD04PU");
EntityManager manager = factory.createEntityManager();
manager.getTransaction().begin();
Cargo novoCargo = new Cargo();
Funcionario novoFuncionario = new Funcionario();
Scanner entrada = new Scanner(System.in);
System.out.print("\nCargo: ");
novoCargo.setCargo(entrada.nextLine());
manager.persist(novoCargo);
System.out.print("\nNome: ");
novoFuncionario.setNome(entrada.nextLine());
System.out.print("\nSexo: ");
novoFuncionario.setSexo(entrada.nextLine());
System.out.print("\nTelefone: ");
novoFuncionario.setTelefone(entrada.nextLine());
novoFuncionario.setCargo(novoCargo);
manager.persist(novoFuncionario);
manager.getTransaction().commit();
factory.close();
但結果 Cargo 和 Funcionario 的外鍵計數如下:Cargo 從 1 開始,而 Funcionario 從 2 開始,然后 Cargo 主鍵變為 3,Funcionario 主鍵變為 4。
就好像兩個主鍵是相同的。
為什么呢? 如何解決?
上面,貨物 id 應該用作 Funcionario 表中的外鍵。
您在兩個實體中重復使用相同的序列,要將它們分開,您可以使用
@Entity
public class Cargo implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cargo_generator")
@SequenceGenerator(name="cargo_generator", sequenceName = "cargo_seq", allocationSize=50)
private Long id;
private String cargo;
@OneToOne(mappedBy="cargo")
private Funcionario funcionario;
}
和
@Entity
public class Funcionario implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "funcionario_generator")
@SequenceGenerator(name="funcionario_generator", sequenceName = "funcionario_seq", allocationSize=50)
private Long id;
private String nome;
private String sexo;
private String telefone;
@OneToOne
private Cargo cargo;
}
如果您手動創建架構,則必須定義序列: cargo_seq
和funcionario_seq
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.