numer tygodnia z daty

0

Hej, mam poniższą encję, w której jest pole daty. Zaistaniała potrzeba wykonania raportu w oparciu o tą encję i encje zależne ale tak by agregować dane po numerze tygodnia a nie po dacie. Dopisałem metodę getWeekNumber. Czy jest możliwość abym zwrócił dane, tak wprost, z numerem tygodnia zamiast daty? Pytam co by się nie narobić :)
Inaczej pewnie musiałbym wrzucić zwrócone dane do jakiegoś DTO i je wyświetlić w raporcie. W tej chwili po prostu robię repository.findByCosTam()

@Entity
@Audited
@Data
@EqualsAndHashCode
public class Document {

  public Document() {
    this.status = Status.NEW;
  }

  @Id
  @GeneratedValue(strategy = IDENTITY)
  private Long id;

  @Enumerated(value = STRING)
  private Status status;

  @OneToOne(cascade = {PERSIST, MERGE}, fetch = EAGER)
  @JoinColumn(name = "client_card_id")
  private ClientCard clientCard;

  @NotNull
  @DateTimeFormat(iso = ISO.DATE)
  private LocalDate date;

  public enum Status {
    NEW, PRE, CONFIRMED
  }

  public int getWeekNumber(LocalDate date) {

    WeekFields weekFields = WeekFields.of(Locale.getDefault());
    return date.get(weekFields.weekOfWeekBasedYear());
  }
}
0

Można je zapisać w polu oznaczonym jako @Transient i następnie wyliczać za pomocą @PostLoad, ale wtedy jeżeli encja będzie nieutrwalona, to wartość będzie pusta. Temu można zaradzić samodzielnie dodając setter do date i zmieniając @Access dla tego pola na Property. Wtedy wywołanie settera spowoduje wyliczenie tygodnia.

0

Dziękuję @Koziołek
Zapomniałem o @transient. Tak naprawdę wystarczy dodać tą adnotację.
Tylko, że mam małą niewiadomą bo raport, o którym pisałem to raport w Jasper Reports. Generuję sobie PDF. W samym XMLu dodaję sobie pola z encji np tak:

  <field name="document.date" class="java.lang.String"/>
  <field name="clientCard.firstName" class="java.lang.String"/>

czyli wszystko pcham do niego co zwraca mi repozytorium. I teraz jak użyć @transient w Jasper. Przepraszam za nowe fakty i za brak precycji.

0

Heh no jeśli masz adnotację @Transient to znaczy że jej nie ma w bazie, a raport tworzysz w oparciu o bazę, więc w zapytaniu tego nie wyciągniesz ;) Według mnie masz dwie opcje tutaj:

  1. Masz to swoje transient, a podczas generowania jasperowego reportu do mapy parametrów wrzucasz ten swój wyliczony numerek tygodnia (i potem w reporcie bierzesz to jako parametr)
  2. Nie dodajesz żadnego nowego pola, tylko w zapytaniu jasperowym odpowiednio przekształcasz datę z bazy na numer tygodnia, tutaj to wyjaśniają dla Oracle: http://stackoverflow.com/questions/16530044/how-to-extract-week-number-in-sql
0

Znalazłem jeszcze coś takiego
http://jasperreports.sourceforge.net/sample.reference/functions/FunctionsReport.pdf

Na drugiej stronie jest funkcja WEEKNUM
jeszcze nie testowalem

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