簡體   English   中英

Java Hibernate 的主鍵問題?

[英]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_seqfuncionario_seq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM