Проблема с первичными ключами Java Hibernate? - PullRequest
0 голосов
/ 15 февраля 2020

Я использую 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();


, но в результате внешние ключи Car go и Funcionario считаются следующим образом: Car go начинается с 1, тогда как Funcionario начинается с 2 , тогда первичный ключ Car go становится 3, а первичный ключ Funcionario становится 4.

Как будто оба первичных ключа были одинаковыми.

Почему это так? Как это исправить?

Выше идентификатор Car go должен использоваться в качестве внешнего ключа в таблице Funcionario.

1 Ответ

1 голос
/ 15 февраля 2020

Вы повторно используете одну и ту же последовательность в обеих сущностях, чтобы разделить их, вы можете использовать

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...