Аннотация @IdClass JPA

Вы всегда можете JQuery-ize Ваш form.submit, но он может просто назвать то же самое:

$("form").submit(); // probably able to affect multiple forms (good or bad)

// or you can address it by ID
$("#yourFormId").submit();

Вы можете также присоединение функции к отправлять событию, но это - различное понятие.

5
задан Hash 1 November 2017 в 21:32
поделиться

1 ответ

Не рекомендуется хранить сущности в качестве первичного ключа. При использовании языка запросов существуют некоторые ограничения, и JPA 1.0 не поддерживает. Кроме того, нет необходимости использовать сущности в качестве первичного ключа. Подумайте об этом. Если хотите, обратите особое внимание на следующий вопрос

Класс, который ведет себя как @Entity и @Embeddable

Ответ первый

Комментарий к первому ответу

Вы увидите, что используя сущность в качестве первичного ключа не требуется.

Вместо

public class GroupMembershipPK implements Serializable {

    private User user;
    private Group group;

}

Использование

public class GroupMembershipPK implements Serializable {

    private Integer userId;
    private Integer groupId;

}

равно реализации важно, потому что JPA сравнивает две сущности, используя ее (JPA проверяет, находится ли сущность в контексте постоянства, используя реализацию равенства). Таким образом, вы можете реализовать в соответствии с советом

public boolean equals(Object o) {
    if(o == null)
        return false;

    if(!(o instanceof GroupMembershipPK))
        return false;

    GroupMembershipPK other = (GroupMembershipPK) o;
    if(!(getUserId().equals(other.getUserId()))
        return false;

    if(!(getGroupId().equals(other.getGroupId()))
        return false;

    return true;
}

: рекомендуется использовать доступ к свойствам вместо доступа к полям, потому что в некоторых случаях реализация JPA использует прокси-объект из-за проблем с производительностью. Прокси-объект использует доступ к свойствам, потому что он позволяет реализации JPA обращаться к базе данных, когда это необходимо.

Как сохранить объект, который использует составной первичный ключ?

User user = new user();
Group group = new Group();

entityManager.save(user);
entityManager.save(group);

entityManager.flush();

UserGroup userGroup = new UserGroup();

userGroup.setId(new UserGroup.UserGroupId(user.getId(), group.getId()));

entityManager.save(userGroup);

Вы хотите знать, как реализовать UserGroup?

public class UserGroup {

    private UserGroupId id;

    // You can create UserGroupId outside UserGroup class
    // Feel free to choice your best approach
    @Embeddable
    public static class UserGroupId implements Serializable {

        private Integer userId;
        private Integer groupId;

        // required no-arg constructor
        public UserGroupId() {}

        public UserGroupId(Integer userId, Integer groupId) {
            this.userId = userId;
            this.roupId = groupId;
        }

        // getter's and setter's

        // equals and hashcode as shown above

    }

    @EmbeddedId
    public UserGroupId getId() {
        return this.id;
    }

    public setId(UserGroupId id) {
        this.id = id;
    }
}

Еще один подход к использованию составного первичного ключа - это IdClass. См. IdClass

с уважением,

7
ответ дан 14 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: