2011-01-05 3 views
3

J'ai un problème avec Hibernate. J'ai essayé de mapper un objet Calendar à Date, que j'ai utilisé dans ma structure de table.Mappage de calendrier à date

Dans le guide de référence de Hibernate vous pouvez trouver les informations sur la cartographie des types, où vous trouverez quelque chose comme ça "calendar_date".

<property generated="never" lazy="false" name="dateB" type="calendar_date" /> 

Mais un simple égaux ne fonctionne pas (pas de résultat, mais phpMyAdmin me donne les mêmes résultats de la requête):

List<Maturity> result = session.createCriteria(Maturity.class).add(Restrictions.eq("dateB", date0)).list(); 

Voici la classe de maturité:

package datahandler.objects; 

import java.util.Calendar; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 

@Entity 
public class Maturity { 

final int DAY = 0; 
final int MONTH = 1; 
final int YEAR = 2; 
final int HOUR = 3; 
final int MIN = 4; 

@Id 
@GeneratedValue 
private int id; 
@Temporal(TemporalType.DATE) 
private Calendar dateB = Calendar.getInstance(); 
private Calendar dateE = Calendar.getInstance(); 
private Calendar timeB = Calendar.getInstance(); 
private Calendar timeE = Calendar.getInstance(); 
private String name; 
private String description; 

public Maturity() { 
    // this.id = 0; // Sicherheitseintrag für leeren Termin-Datensatz!!! 
} 

public Maturity(int id, Calendar dateB, Calendar dateE, String name, 
    String description) { 
    this.id = id; 
    this.timeB = dateB; 
    this.dateB = dateB; 
    this.timeE = dateE; 
    this.dateE = dateE; 
    this.name = name; 
    this.description = description; 
} 

public Maturity(Calendar dateB, Calendar dateE, String name, 
    String description) { 
    this.timeB = dateB; 
    this.dateB = dateB; 
    this.timeE = dateE; 
    this.dateE = dateE; 
    this.name = name; 
    this.description = description; 
} 

public Maturity(int id, int dayB, int monB, int yearB, int hourB, int minB, 
    int dayE, int monE, int yearE, int hourE, int minE, String name, 
    String description) { 
    this.id = id; 
    this.timeB.set(0, 0, 0, hourB, minB, 0); 
    this.dateB.set(yearB, monB - 1, dayB); 
    this.timeE.set(0, 0, 0, hourE, minE, 0); 
    this.dateE.set(yearE, monE - 1, dayE); 
    this.name = name; 
    this.description = description; 
} 

public Maturity(int dayB, int monB, int yearB, int hourB, int minB, 
    int dayE, int monE, int yearE, int hourE, int minE, String name, 
    String description) { 
    this.timeB.set(0, 0, 0, hourB, minB, 0); 
    this.dateB.set(yearB, monB - 1, dayB); 
    this.timeE.set(0, 0, 0, hourE, minE, 0); 
    this.dateE.set(yearE, monE - 1, dayE); 
    this.name = name; 
    this.description = description; 
} 

// Standard Get- Methoden 
public int getId() { 
    return id; 
} 

public Calendar getDateB() { 
    return dateB; 
} 

public Calendar getTimeB() { 
    return timeB; 
} 

public Calendar getDateE() { 
    return dateE; 
} 

public Calendar getTimeE() { 
    return timeE; 
} 

public String getName() { 
    return name; 
} 

public String getDescription() { 
    return description; 
} 


// Standard Set- Methoden 
public void setId(int id) { 
    this.id = id; 
} 

public void setDateB(Calendar dateB) { 
    this.dateB = dateB; 
} 

public void setTimeB(Calendar timeB) { 
    this.timeB = timeB; 
} 

public void setDateE(Calendar dateE) { 
    this.dateE = dateE; 
} 

public void setTimeE(Calendar timeE) { 
    this.timeE = timeE; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

// Spezielle Get- Methoden für Calendar (Array: 
// [DAY][MONTH][YEAR][HOUR][MIN]) 
public int[] getDateB_M() { 
    return new int[] { dateB.get(Calendar.DAY_OF_MONTH), 
    dateB.get(Calendar.MONTH) + 1, dateB.get(Calendar.YEAR), 
    timeB.get(Calendar.HOUR_OF_DAY), timeB.get(Calendar.MINUTE) }; 
} 

public int[] getDateE_M() { 
    return new int[] { dateE.get(Calendar.DAY_OF_MONTH), 
    dateE.get(Calendar.MONTH) + 1, dateE.get(Calendar.YEAR), 
    timeE.get(Calendar.HOUR_OF_DAY), timeE.get(Calendar.MINUTE) }; 
} 

// Spezielle Set- Methoden für Calendar 
public void setDateB(int day, int month, int year, int hour, int min) { 
    this.timeB.set(0, 0, 0, hour, min); 
    this.dateB.set(year, (month - 1), day); 
} 

public void setDateE(int day, int month, int year, int hour, int min) { 
    this.timeE.set(0, 0, 0, hour, min); 
    this.dateE.set(year, (month - 1), day, hour, min); 
} 

public void setDateB(int day, int month, int year) { 
    this.dateB.set(year, (month - 1), day, 0, 0); 
} 

public void setDateE(int day, int month, int year) { 
    this.dateE.set(year, (month - 1), day, 0, 0); 
} 
} 

date0 génération:

Calendar rangeStart = Calendar.getInstance(); 
int dayB, monB, yearB; 

dayB = this.readGetParameterAsInteger("startDay"); 
monB = this.readGetParameterAsInteger("startMonth"); 
yearB = this.readGetParameterAsInteger("startYear"); 

rangeStart.set(yearB, monB, dayB, 0, 0, 0); 

Que puis-je faire?

+1

Je pense que vous aurez besoin d'afficher plus de code que celui-ci - peut-être les classes 'Maturity' et' Restrictions'. – javamonkey79

+1

Les restrictions sont données par Hibernate. :) – CSchulz

+0

Définir "ne fonctionne pas". Cela vous donne-t-il une erreur d'exécution? La requête renvoie-t-elle des données impaires? Quel est le type de "date0"? – codelark

Répondre

1

La solution suit:

Calendar rangeStart = Calendar.getInstance(); 
int dayB, monB, yearB; 

dayB = this.readGetParameterAsInteger("startDay"); 
monB = this.readGetParameterAsInteger("startMonth"); 
yearB = this.readGetParameterAsInteger("startYear"); 

rangeStart.set(yearB, monB-1, dayB, 0, 0, 0); 

Parce que le mois est basée 0-! -.-

1

le calendrier des types Hibernate, calendar_date MAP java.util.Calendar aux types SQL TIMESTAMP et DATE. Vous êtes là. Mais vous devez montrer quel est le type de date0 et comment il est construit ou récupéré.

Essayez aussi le calendrier alterenative au lieu du calendar_date

+0

Voir ci-dessus, j'ai essayé les deux voies sans succès. – CSchulz

Questions connexes