Я использую последнюю версию Hibernate Tools от JBoss Studio/Eclipse для генерации Java POJO из моей схемы базы данных.Инструменты для спящего режима - заказ POJO
Когда есть метод get, который получает дополнительные объекты, я хочу, чтобы они возвращались в определенном порядке. Очевидно, что я могу просто отредактировать файл класса, однако эти изменения будут потеряны, если эти файлы будут повторно сгенерированы, если произойдут какие-либо изменения схемы.
Исследование показало, что должно быть возможно добавить эти параметры, используя конфигурацию hibernate reverse engineering XML или, возможно, файл hibmate hbm xml. Я не могу заставить их работать, и я надеюсь, что кто-то может предоставить пример конфигурации, который будет работать.
Я создал очень простую БД, чтобы проиллюстрировать проблему.
SQL Schema:
--
-- Table structure for table `pupil`
--
DROP TABLE IF EXISTS `pupil`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pupil` (
`ID` int(11) NOT NULL,
`school_id` int(11) NOT NULL,
`forename` varchar(100) NOT NULL,
`surname` varchar(100) NOT NULL,
`gender` enum('M','F') NOT NULL,
PRIMARY KEY (`ID`),
KEY `fk_pupils_schools_idx` (`school_id`),
CONSTRAINT `fk_pupils_schools` FOREIGN KEY (`school_id`) REFERENCES `school` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION)
ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `school`
--
DROP TABLE IF EXISTS `school`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `school` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
Это приводит к двум POJOs.
Pupil.java
package hibernateExample.db;
// Generated 20-Sep-2014 15:34:31 by Hibernate Tools 4.0.0
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
/**
* Pupil generated by hbm2java
*/
@Entity
@Table(name = "pupil", catalog = "test")
public class Pupil implements java.io.Serializable {
private int id;
private School school;
private String forename;
private String surname;
private String gender;
public Pupil() {
}
public Pupil(int id, School school, String forename, String surname,
String gender) {
this.id = id;
this.school = school;
this.forename = forename;
this.surname = surname;
this.gender = gender;
}
@Id
@Column(name = "ID", unique = true, nullable = false)
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "school_id", nullable = false)
public School getSchool() {
return this.school;
}
public void setSchool(School school) {
this.school = school;
}
@Column(name = "forename", nullable = false, length = 100)
public String getForename() {
return this.forename;
}
public void setForename(String forename) {
this.forename = forename;
}
@Column(name = "surname", nullable = false, length = 100)
public String getSurname() {
return this.surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
@Column(name = "gender", nullable = false, length = 2)
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
School.java. Метод getPupils должен иметь добавление OrderBy, добавленное в создании POJO. Возможно, это должен быть список, а не набор?
package hibernateExample.db;
// Generated 20-Sep-2014 15:34:31 by Hibernate Tools 4.0.0
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
* School generated by hbm2java
*/
@Entity
@Table(name = "school", catalog = "test")
public class School implements java.io.Serializable {
private Integer id;
private String name;
private Set<Pupil> pupils = new HashSet<Pupil>(0);
public School() {
}
public School(String name, Set<Pupil> pupils) {
this.name = name;
this.pupils = pupils;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name", length = 200)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "school")
public Set<Pupil> getPupils() {
return this.pupils;
}
public void setPupils(Set<Pupil> pupils) {
this.pupils = pupils;
}
}
Благодаря
@OrderBy аннотации будет достаточно, даже если это список или набор. Какой результат вы получили? http://www.javacodegeeks.com/2012/04/hibernate-tip-sort-and-order.html – user23123412
@ user23123412, как я могу добавить эту аннотацию в точке генерации POJO? Несколько примеров, которые я нашел в Интернете, похоже, не имеют никакого эффекта, и, похоже, нет выхода в eclipse, чтобы помочь отладить там, где может возникнуть проблема – hedgehog14