Как извлечь с помощью jpa ElementCollection - PullRequest
0 голосов
/ 06 декабря 2018

Сущность :

package spring_mvc.entity;

import javax.persistence.*;

import java.util.List;

@Entity
@Table(name = "font")
public class DBFonts {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;
    private String nameFont;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "User_id",referencedColumnName = "id")
    private User user;


    @ElementCollection
    @CollectionTable(
            name="StandartFont",
            joinColumns=@JoinColumn(name="Fonts_id")
    )
    @Lob @Basic(fetch = FetchType.LAZY)
    @Column(length=100000)
    private List<byte[]> StandartFont;


 public DBFonts(String nameFont, List<byte[]> standartFonts, User user) {
    this.nameFont = nameFont;
    this.user = user;
    StandartFonts = standartFonts;
}
    public long getId() {
        return id;
    }

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

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }


    public String getNameFont() {
        return nameFont;
    }

    public void setNameFont(String nameFont) {
        this.nameFont = nameFont;
    }






}

JpaRepository:

public interface FontRepo extends JpaRepository<DBFonts,Long> {
   List<DBFonts> findByUserId(Long userID);

}

обновление БД:

public ResponseEntity<?> CreateFont(@AuthenticationPrincipal User user,@RequestPart MultipartFile[] files)
   List<byte[]> filescommon = this.saveUploadedFiles(files);
   DBFonts Fonts = new DBFonts(nameFont,filescommon,user);
       fontRepo.save(Fonts);
 return new ResponseEntity<String>(
                HttpStatus.OK);

Все данные добавленыв базу данных (ElementCollection Too) !!

main:

public ResponseEntity<?> CreateFont(@AuthenticationPrincipal User user) throws Exception {
List<DBFonts> list= fontRepo.findByUserId(user.getId());
System.out.println(dBfont.get(0).getStandartFonts());
 System.out.println(dBfont.get(0).nameFont());
 return new ResponseEntity<String>(HttpStatus.OK);

Все данные извлекаются, кроме данных, хранящихся в таблице, созданной ElementCollection.

dBfont.get (0) .getStandartFonts () - здесь возникает ошибка:

    Hibernate: select standartfo0_.fonts_id as fonts_id1_1_0_, standartfo0_.standart_fonts as standart2_1_0_ from standart_font standartfo0_ where standartfo0_.fonts_id=?
2018-12-06 15:47:38.331  WARN 7912 --- [nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by handler execution: org.hibernate.type.SerializationException: could not deserialize
2018-12-06 15:47:38.332  WARN 7912 --- [nio-8080-exec-5] o.h.e.loading.internal.LoadContexts      : HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@70ff5b98<rs=HikariProxyResultSet@850091861 wrapping com.mysql.jdbc.JDBC42ResultSet@27d3ac01>
2018-12-06 15:47:38.332  WARN 7912 --- [nio-8080-exec-5] o.h.e.l.internal.CollectionLoadContext   : HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries

Если вы посмотрите в отладке: StandartFont size = 0

Какизвлечь данные из ElementCollection?через JpaRepository

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