Problem JPA ManyToMany z @Inheritance

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)]

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?
0

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

1

Jeżeli @Id jest na getterze to wtedy hibernate używa "property-based access" zamiast "field-based access".
https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/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.

0

Dzięki.

Przeniosłem joina do gettera i jest ok .

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