Problem JPA ManyToMany z @Inheritance

Odpowiedz Nowy wątek
2018-12-15 16:02
0

Witam.

Mam taki problem i nie wiem już co robię nie tak:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class OfferElement {

    private Long id;
    private String description;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "offer_images", joinColumns = @JoinColumn(name = "offer_id"), inverseJoinColumns = @JoinColumn(name = "image_id"))
    private List<Image> images;

    public List<Image> getImages() {
        return images;
    }

    public void setImages(List<Image> images) {
        this.images = images;
    }
@Entity
@Table(name = "image")
public class Image {
    private Long id;
    private String name;
    private String url;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

}

I dostaję błąd

Could not determine type for: java.util.List, at table: offer_element, for columns: [org.hibernate.mapping.Column(images)]

Pozostało 580 znaków

2018-12-15 18:40
1
  1. A w OfferElement masz @Id ?
  2. A jak wyglądaja tam importy (w OfferElement)?
  3. Może coś klasach dziedziczących z OfferElement psujesz?

Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.

Pozostało 580 znaków

2018-12-15 18:57
0

A weź spróbuj z setem zamiast listą, czyli Set<Image>

Pozostało 580 znaków

2018-12-15 19:30

Jeżeli @Id jest na getterze to wtedy hibernate używa "property-based access" zamiast "field-based access".
https://docs.jboss.org/hibern[...]e/chapters/domain/access.html

As a JPA provider, Hibernate can introspect both the entity attributes (instance fields) or the accessors (instance properties). By default, the placement of the @Id annotation gives the default access strategy. When placed on a field, Hibernate will assume field-based access. Place on the identifier getter, Hibernate will use property-based access.

Zgaduję że w OfferElement masz @Id na getterze podobnie jak w Image.
Jeżeli tak, to powinienes trzymać się jednego stylu oznakowania kolumn:
-przesuń "@JoinTable(name = "offer_images..." na gettera
-lub przesuń @Id na pole

Mieszanie obu stylów może skutkować różnymi problemami.

edytowany 5x, ostatnio: Seti87, 2018-12-15 19:35

Pozostało 580 znaków

2018-12-16 16:25
0

Dzięki.

Przeniosłem joina do gettera i jest ok .

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