Kolejność w kluczu złożonym JPA

Odpowiedz Nowy wątek
2019-05-15 13:55
0

Mam taki problem że gdy tworze tabele z kluczem złożonym z 2 pól tworzy klucz ze "złą" kolejnością pól w kluczu na bazie.

Mam klasę np:

@Table("Alarm", schema = "dbo")
class Alarm {
@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name ="AlarmId")
    private long id;
@Id
    @Column(name ="OFFICEDATETIME", columnDefinition = "datetime2(7) DEFAULT GETDATE()")
    private Timestamp officeDateTime;

@OneToMany(fetch = FetchType.EAGER, mappedBy = "AlarmId", cascade = {CascadeType.REMOVE, CascadeType.PERSIST})
    private List<AlarmParameter> alarmParameters;
...
}

@Table("AlarmParameter", schema = "dbo")
class AlarmParameter {

@ManyToOne(fetch = FetchType.EAGER)
    @JoinColumns({
            @JoinColumn(name = "AlarmId", referencedColumnName = "AlarmId"),
            @JoinColumn(name = "AlarmOfficeTime", referencedColumnName = "OFFICEDATETIME")})
    private Alarm AlarmId;

...
}

I kolejność klucza na bazie dla tabeli Alarm jest:
[OFFICEDATETIME], [AlarmId]
a chce osiągnąć aby był:
[AlarmId], [OFFICEDATETIME]

Da się manipulować kolejnością pól klucza czy tylko tworzenie z poziomu SQL zostaje?

edytowany 2x, ostatnio: darksead, 2019-05-15 14:01

Pozostało 580 znaków

2019-05-15 14:34
0

Kiedyś też miałem taki przypadek i rozwiązałem to dodając klasę na klucz np.

@Embeddable
public class ArticleOwnerId implements Serializable {

    @Column(name = "article_id")
    private long articleId;

    @Column(name = "owner_id")
    private String ownerId;

    public long getArticleId() {
        return articleId;
    }

    public String getOwnerId() {
        return ownerId;
    }
}

A później w samej encji:

@Entity
@IdClass(ArticleOwnerId.class)
@Table(name = "article_owner")
public class ArticleOwner {

    @NotNull
    @Column(name = "article_id")
    private long articleId;

    @NotNull
    @Column(name = "owner_id")
    private String ownerId;
....

Pozostało 580 znaków

2019-05-15 15:08
0

Robiłem podobnie tyle że klasa z id była @Embeddable i referencja w klasie miała @EmbededId i był ten sam problem
Dodam że baza to SQL Server

Pozostało 580 znaków

2019-05-15 15:13
0

Jeszcze jak jest ten join to użyj tego typu konstrukcji

            name = "article_owner",
            joinColumns = {@JoinColumn(name = "article_id")},
            inverseJoinColumns = {@JoinColumn(name = "owner_id")})```

Pozostało 580 znaków

2019-05-15 18:17
0

Adnotacja @Index nigdy mnie czymś takim nie zaskoczyła
https://docs.oracle.com/javae[...]/javax/persistence/Index.html

BTW NA pewno myślisz o złożonym kluczu pierwotnym??? Po Id by wystarczył, wszystko robi się prostsze.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0