0

I have two entities, naming Sport and Image.

As the title above, how can I map the value of property, sportId at Sport to the @ManyToOne collection property at Image? For instance, I want the value of sportId (eg. 1) to be displayed at collection property field of sportId at Image. How can I achieve this?

Sport.java

@Views({@View(members= "title; date; estimatedCost; attendance; remark; images"), 

@View(name="NoImagesCollection", members= "sportId; title; date; estimatedCost; attendance; remark")})
@Entity
public class Sport {

    //******************************FORM ID******************************//
    @Id 
    @Hidden
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="SPORT_ID", length=10, unique = true, nullable = false, updatable = false)
    private int sportId;

    @NoCreate
    @NoModify
    @OneToMany(fetch = FetchType.LAZY,cascade=CascadeType.ALL,mappedBy="sports")
    private Collection<Image> images;

    //******************************TITLE******************************//
    @Column(name="SPORT_TITLE", precision=2000)
    @Required
    private String title;

    //******************************DATE START******************************//
   // @Stereotype("DATE")
    @Column(name="SPORT_DATE")
    @Required
    private Date date;

    //******************************ESTIMATED COST******************************//
    @Hidden
    @Stereotype("MONEY")
    @Column(name="SPORT_EST_COST")
    @Required
    private BigDecimal estimatedCost; // Include the import java.math.*  BigDecimal is typically used for money

    //******************************ESTIMATED ATTENDEES******************************//
    @Hidden
    @Column(name="SPORT_ATTENDANCE", length=10)
    @Required
    private int attendance;

    //******************************REMARK******************************//
    @Hidden
    @Editor("TextAreaNoFrame")
    @Stereotype("MEMO")
    @Column(name="SPORT_REMARK", precision=2000)
    private String remark;

    //******************************ENTERED DATE******************************//
    @Hidden
    @Column(name="ENTERED_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date enteredDate;

    @PrePersist
    private void setCreateDate() {
        enteredDate = new Date();
    }

    //******************************MODIFIED DATE******************************//
    @Hidden
    @Column(name="MODIFIED_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date modifiedDate;

    @PostUpdate
    private void updateModifyDate() {
        modifiedDate = new Date();
    }

  //******************************GETTERS AND SETTERS FOR ALL PROPERTIES******************************//

    public int getSportId() {
        return sportId;
    }

    public void setSportId(int sportId) {
        this.sportId = sportId;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public BigDecimal getEstimatedCost() {
        return estimatedCost;
    }

    public void setEstimatedCost(BigDecimal estimatedCost) {
        this.estimatedCost = estimatedCost;
    }

    public int getAttendance() {
        return attendance;
    }

    public void setAttendance(int attendance) {
        this.attendance = attendance;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public Date getEnteredDate() {
        return enteredDate;
    }

    public void setEnteredDate(Date enteredDate) {
        this.enteredDate = enteredDate;
    }

    public Date getModifiedDate() {
        return modifiedDate;
    }

    public void setModifiedDate(Date modifiedDate) {
        this.modifiedDate = modifiedDate;
    }

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

    public void setImages(Collection<Image> images) {
        this.images = images;
    }

}

Image.java

@View(members="sports; image")

@Entity
public class Image {                     

    @Id
    @Hidden 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="IMG_ID", unique = true, nullable = false, updatable = false)
    private int imgId;

    @Required
    @Column(name="IMG_IMAGE")
    @Stereotype("PHOTO")
    private byte [] image;

    @ReferenceView("NoImagesCollection")
    @Required
    @NoFrame
    @ManyToOne(optional=true)
    @JoinColumn(name="IMG_SPORT_ID", nullable = false)
    private Sport sports;

    @Hidden
    @Column(name="ENTERED_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date penteredDate;

    @PrePersist
    private void setCreateDate() {
        penteredDate = new Date();
    }

    @Hidden
    @Column(name="MODIFIED_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date pmodifiedDate;

    @PostUpdate
    private void updateModifyDate() {
        pmodifiedDate = new Date();
    }

    public int getImgId() {
        return imgId;
    }

    public void setImgId(int imgId) {
        this.imgId = imgId;
    }

    public byte[] getImage() {
        return image;
    }

    public void setImage(byte[] image) {
        this.image = image;
    }

    public Sport getSports() {
        return sports;
    }

    public void setSports(Sport sports) {
        this.sports = sports;
    }

    public Date getPenteredDate() {
        return penteredDate;
    }

    public void setPenteredDate(Date penteredDate) {
        this.penteredDate = penteredDate;
    }

    public Date getPmodifiedDate() {
        return pmodifiedDate;
    }

    public void setPmodifiedDate(Date pmodifiedDate) {
        this.pmodifiedDate = pmodifiedDate;
    }

}

ListSportImagesAction.java

public class ListSportImagesAction extends TabBaseAction implements IForwardAction { 

private int row;

@Inject  
private Tab tab;

public void execute() throws Exception {
    Map sportKey = (Map) tab.getTableModel().getObjectAt(row);         
    int sportId = ((Integer) sportKey.get("sportId")).intValue();
    Tab imageTab = (Tab)getContext().get("CkSurvey", getForwardURI(), "xava_tab");           
    imageTab.setBaseCondition("${sport.sportId} = " + sportId);
    System.out.println("id================="+sportId);
}

public int getRow() {                                                   
    return row;
}
public void setRow(int row) {                                          
    this.row = row;
}

public Tab getTab() {
    return tab;
}
public void setTab(Tab tab) {
    this.tab = tab;
}

@Override
public String getForwardURI() {
    return "/m/Image";
}

@Override
public boolean inNewWindow() {
    return true;
}

}

Any guidance provided will be appreciated.

--Edited--

I have added the code for the action that map the value. I fail to display the value at the property field, although it is displayed at Eclipse's console.

Brian Cheong
  • 43
  • 2
  • 14
  • I don't understand you want to achieve. Put a list of user steps and data obtained in UI in each step. – javierpaniza May 05 '17 at 11:52
  • Step 1: User enters a data for Sport. Step 2: User goes to "List" view, click on a in-each-row=true's button, which associate with the data entered in step 1. Step 3: User does the file uploading at Image. The data with a sportId value will map onto the sportId property field at Image. (HERE IS MY ISSUE). It is the similar post at SourceForge. You mentioned add getView.findObject() but still not working. – Brian Cheong May 08 '17 at 03:20
  • It's just a list action that do a file upload. In the OpenXava wiki explains how to do a list action and a upload file action. Of course, you have to write the logic to save the uploaded file in the corresponding entity property. – javierpaniza May 11 '17 at 10:59

0 Answers0