0
Hello folks good afternoon!
Well, briefly I have a problem where I have no idea what might be going on. In my opinion such behavior makes no sense.
I am using Spring MVC + Spring Data to facilitate CRUD operations on my system. I have a page where I register categories, it is something simple, just a field "name" and another to check whether the category is active or not.
Next I have a "Destination Management", who aims to register new destinations. In it I have an association with category in which a dropdown list component is populated. Such a relationship is unidirectional Onetoone factor.
The component is populated normally, below the code of the same:
View:
<f:select path="categories.idCategory">
<f:option value="-1" label="-- Selecione uma categoria para associação --"/>
<f:options items="${categoryDropDown}" itemValue="idCategory" itemLabel="ctName"/>
</f:select>
Controller:
//Entra na tela de cadastro de um novo destino
@RequestMapping("newDestination")
public ModelAndView setnewDestination(Model model, HttpServletRequest req){
//Inicializa o Componente DropDown de Categoria
List<Category> category = dashboardFacade.getCategoryList();
List<Category> activeCategory = new ArrayList<Category>();
//Verificação de categorias que não estão ativas
for (Category allCAtegory : category) {
if(allCAtegory.getCtActive() == 1){
activeCategory.add(allCAtegory);
}
}
model.addAttribute("categoryDropDown", activeCategory);
return new ModelAndView("destination/newDestination", "command", new Destination());
}
Stabbing:
public List<Category> getCategoryList(){
return categoryRepository.findAll();
}
Repository:
@Repository
public interface CategoryRepository extends BaseRepository<Category, Long>{
List<Category> findAll();
}
Well, what happens in reality is that when I go to register a new destination and select a category the same and successfully saved at the base. But when I have re-registered a destination to my List<Category> category = dashboardFacade.getCategoryList();
comes with inconsistent object. That is, with null values.
Category object populating the Dropbox without its association having been saved:
- [idCategory=1, ctActive=1, ctName=National, tenantId=2],
- [idCategory=2, ctActive=0, ctName=International, tenantId=2],
- [idCategory=3, ctActive=1, ctName=Cruising, tenantId=2],
- [idCategory=4, ctActive=1, ctName=Spatial, tenantId=2],
I saved a new destination with the category name "National". When the dropdown simply does not appear. This is the state that Category is located in:
- [idCategory=1, ctActive=0, ctName=null, tenantId=null],
- [idCategory=2, ctActive=0, ctName=International, tenantId=2],
- [idCategory=3, ctActive=1, ctName=Cruising, tenantId=2],
- [idCategory=4, ctActive=1, ctName=Spatial, tenantId=2],
I have no idea what might be going on.
If anyone can help, I’m very grateful.
Hug to all
EDITION
Below are the mappings:
Destination.java
package br.com.joocebox.model;
import java.io.Serializable;
import javax.persistence.*;
import org.eclipse.persistence.annotations.Multitenant;
import org.eclipse.persistence.annotations.TenantDiscriminatorColumn;
import org.eclipse.persistence.config.PersistenceUnitProperties;
/**
* The persistent class for the destination database table.
*
*/
@Entity
@Table(name="destination")
@Multitenant
@TenantDiscriminatorColumn(name="tenant_id", discriminatorType=DiscriminatorType.INTEGER, contextProperty=PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT)
@NamedQuery(name="Destination.findAll", query="SELECT d FROM Destination d")
public class Destination implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_destination")
private Long idDestination;
@Column(name="tenant_id", insertable=false, updatable=false)
private Long tenantId;
@Column(name="active")
private byte dtActive;
@Column(name="appear_website")
private Boolean dtAppearWebsite;
@Lob
@Column(name="description")
private String dtDescription;
@Column(name="highlight_website")
private Boolean dtHighlightWebsite;
@Column(name="name")
private String dtName;
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="fk_streetview")
private StreetView streetView;
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="fk_video")
private Video video;
@OneToOne
@JoinColumn(name="fk_category")
private Category categories;
// //bi-directional many-to-one association to Agency
// @ManyToOne(fetch=FetchType.LAZY)
// @JoinColumn(name="fk_agency")
// private Agency agency;
//Profiles of System. These profiles are all enum type.
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="fk_economic")
private EconomicProfile economicProfiles;
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="fk_general")
private GeneralProfile generalProfiles;
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="fk_social")
private SocialProfile socialProfiles;
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="fk_trip")
private TripProfile tripProfiles;
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="fk_weather")
private WeatherProfile weatherprofile;
//End of Profiles of System.
// @OneToMany(mappedBy="destination")
// private Set<Image> images;
public Destination() {
}
public Long getIdDestination() {
return this.idDestination;
}
//Getter and Setters
}
Category.java
package br.com.joocebox.model;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.*;
import org.eclipse.persistence.annotations.Multitenant;
import org.eclipse.persistence.annotations.TenantDiscriminatorColumn;
import org.eclipse.persistence.config.PersistenceUnitProperties;
/**
* The persistent class for the category database table.
*
*/
@Entity
@Table(name="category")
@Multitenant
@TenantDiscriminatorColumn(name="tenant_id", discriminatorType=DiscriminatorType.INTEGER, contextProperty=PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT)
@NamedQuery(name="Category.findAll", query="SELECT c FROM Category c")
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_category")
private Long idCategory;
@Column(name="ct_active")
private int ctActive;
@Column(name="ct_name")
private String ctName;
@Column(name="tenant_id", insertable=false, updatable=false)
private Long tenantId;
public Category() {
}
public Long getIdCategory() {
return this.idCategory;
}
//Getters and Setters
@Override
public String toString() {
return "Category [idCategory=" + idCategory + ", ctActive=" + ctActive
+ ", ctName=" + ctName + ", tenantId=" + tenantId + "]";
}
}
Thank you!
filipeportes,
didn’t work. I don’t really know what else can be.
I did it this way:
Category.java:
@Entity
@Table(name="category")
@Multitenant
@TenantDiscriminatorColumn(name="tenant_id", discriminatorType=DiscriminatorType.INTEGER, contextProperty=PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT)
@NamedQuery(name="Category.findAll", query="SELECT c FROM Category c")
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_category")
private Long idCategory;
@Column(name="ct_active")
private int ctActive;
@Column(name="ct_name")
private String ctName;
@Column(name="tenant_id", insertable=false, updatable=false)
private Long tenantId;
//Relacionamento com Category
@OneToMany(mappedBy="categories", fetch=FetchType.LAZY)
private Set<Destination> destination;
//Getters and Setters
Destination.java:
@Entity
@Table(name="destination")
@Multitenant
@TenantDiscriminatorColumn(name="tenant_id", discriminatorType=DiscriminatorType.INTEGER, contextProperty=PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT)
@NamedQuery(name="Destination.findAll", query="SELECT d FROM Destination d")
public class Destination implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_destination")
private Long idDestination;
@Column(name="tenant_id", insertable=false, updatable=false)
private Long tenantId;
@Column(name="active")
private byte dtActive;
@Column(name="appear_website")
private Boolean dtAppearWebsite;
@Lob
@Column(name="description")
private String dtDescription;
@Column(name="highlight_website")
private Boolean dtHighlightWebsite;
@Column(name="name")
private String dtName;
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="fk_streetview")
private StreetView streetView;
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="fk_video")
private Video video;
@ManyToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name="fk_category")
private Category categories;
//Getters and Setters
It seems that something is cached, because when I give a shutdown and raise again the server my object comes consistently.
Hug
can add the mappings of your model classes please?
– filipeportes
@filipeportes I edited the question with the current mappings. Thank you!
– João Manolo
I don’t know if this is related to the problem, but I don’t see the need to use Onetoone mapping in your case, use it only if you need reverse mapping, IE, Destination within Category.
– filipeportes