Как выставить поля и @EmbeddedId - PullRequest
0 голосов
/ 02 мая 2018

У меня есть @Entity с тремя полями A, B, C, из которых A и B действуют как составной первичный ключ. Я создал класс @EmbeddedId, содержащий A и B. Чтобы облегчить бремя определения геттеров и сеттеров, я использовал аннотацию lombok @Data.

@Entity
@Data
public class MyClass {
    @EmbeddedId
    private PrimaryKey id;
}

@Embeddable
@Data
public class PrimareyKey implements Serializable {
    private String A;
    private String B;
}

Я бы не хотел показывать, что A и B являются первичным ключом и имеют доступ к A и имеют доступ ко всем полям одинаковым образом.

//Exposes primary key
myObject.getid().getA();
myObject.getid().getB();
myObject.getC();

//Hides primary key
myObject.getA();
myObject.getB();
myObject.getC();

В настоящее время можно использовать @IdClass, помечая каждый файл как @Id как , предложенный в этом ответе , но если мне все еще нужно использовать @EmbeddedId (или любой @Embedded на самом деле) единственным способом ( Я знаю), чтобы достигнуть этого, нужно написать специальные методы получения и установки, обходя переменную id, такую ​​как

@Entity
@Data
public class MyClass {
    @EmbeddedId
    private PrimaryKey id;

    public String A getA(){
        return id.getA()
    }

    public String A setA(String a){
        id.setA(a);
    }
    //same for B and any other fiels in PrimaryKey

}

Это похоже на много стандартного кода для написания и поддержки.

Есть ли аннотация для выставления @EmbeddedId геттеров и сеттеров?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете использовать AccessLevel с @Getter и @Setter следующим образом:

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private PrimaryKey id;

При использовании @Data у вас есть общедоступный доступ к методам доступа по умолчанию, а использование AccessLevel.NONE перезапишет поведение по умолчанию и не позволит получить доступ к методам доступа.

0 голосов
/ 03 мая 2018

В MyClass добавьте аннотацию Lombok @Delegate к вашему PrimaryKey. Это должно выглядеть так:

@Entity
@Data
public class MyClass {
    @Delegate
    @EmbeddedId
    private PrimaryKey id;
}

Затем вы можете устанавливать / получать поля PrimaryKey непосредственно из MyClass. Здесь является ссылкой для вас, чтобы узнать больше об этом.

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