Как сделать постоянный класс с внешним ключом - PullRequest
1 голос
/ 11 апреля 2019

У меня есть таблица, и я должен написать классы с аннотациями JPA для постоянных.Таблицы таковы:

CREATE TABLE `team` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `player` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `team_id` int(11) unsigned NOT NULL,
    `name` varchar(16536) NOT NULL,
    `position` varchar(16536) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `team_id` (`team_id`),
  CONSTRAINT `player_ibfk_1` FOREIGN KEY (`team_id`) REFERENCES `team` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

И я попробовал это, но я думаю, что это неполно.Это чего-то не хватает?Это правильно, что я написал?

@Entity
public class Team {
    @Id @GeneratedValue long id;
    private String name;
}

@Entity
public class Player {
    @Id @GeneratedValue long id;
    long teamId;
    String name;
    String position;
}

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

В команде больше игроков.Это соотношение 1: N.В JPA вы создаете его, используя @ OneToMany anotation:

@Entity
@Table("team")
public class Team {
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @Column(nullable = false)
    String name;

    @OneToMany(mappedBy = "team", cascade = CascadeType.ALL)
    List<Player> players = new ArrayList<>();
}

@Entity
@Table("player")
public class Player {
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @ManyToOne(fetch=FetchType.LAZY, optional = false)
    @JoinColumn("team_id")
    Team team;

    @Column(nullable = false)
    String name;
    @Column(nullable = false)
    String position;
}

Для идентификатора используйте тип объекта Long.В постоянное время идентификатор объекта является нулевым.После сохранения DB присвоит ему значение.

0 голосов
/ 11 апреля 2019

JPA отобразит иностранную сущность по ее классу.

Попробуйте следующее:

@Entity
public class Team {
    @Id @GeneratedValue long id;
    private String name;
}

@Entity
public class Player {
    @Id @GeneratedValue long id;
    Team teamId;
    String name;
    String position;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...