我有班级公司和联系人与许多人/ onetomany关系:
公司可以有很多联系方式。
我收到错误:
var componentsGuidsConcat = componentsGuid
.Select(p => AssemblyGuid.ToString() + PartGuid.ToString())
.ToList();
var componentsDb = Context.Components
.Where(p => componentsGuidsConcat.Contains(
p.AssemblyGuid.ToString() + p.PartGuid.ToString())
);
当我尝试添加新联系人时。
这是我的联系班级
object references an unsaved transient instance - save the transient instance before flushing: com.myproject.model.Company;
和我的公司班级
@Entity
@Table(name="app_contact")
public class Contacts implements Serializable{
@Column(name="CONTACT_ID")
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer contactid;
@ManyToOne
@JoinColumn(name = "CONTACT_COMPANY")
private Company company;
//Getters and Setters
我尝试将@Entity
@Table(name="APP_COMPANY")
public class Company implements Serializable{
@Column(name="ID")
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@OneToMany( mappedBy = "company",cascade = CascadeType.ALL )
private List<Contacts> contact = new ArrayList<Contacts>();
添加到多方面,但后来我收到一些错误,即某些公司字段不能为空。
我是初学mvc和hibernate的新手,任何帮助都将不胜感激。
contactsDao
cascade=CascadeType.ALL
的ContactService
@Repository("contactsDao")
public class ContactsDAOImpl extends AbstractDao<Integer, Contacts> implements ContactsDao{
static final Logger logger = LoggerFactory.getLogger(ContactsDAOImpl.class);
public Contacts findById(int id) {
Contacts cp = getByKey(id);
return cp;
}
public Contacts findByName(String name) {
logger.info("SSO : {}", name);
Criteria crit = createEntityCriteria();
crit.add(Restrictions.eq("ssoId", name));
Contacts cp = (Contacts)crit.uniqueResult();
return cp;
}
@SuppressWarnings("unchecked")
public List<Contacts> findAllContacts() {
Criteria criteria = createEntityCriteria().addOrder(Order.asc("contactlastname"));
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
List<Contacts> cps = (List<Contacts>) criteria.list();
for(Contacts cp : cps){
Hibernate.initialize(cp.getCompany());
}
return cps;
}
public void save(Contacts cp) {
persist(cp);
}
public void delete(String sso) {
Criteria crit = createEntityCriteria();
crit.add(Restrictions.eq("ssoId", sso));
Contacts cp = (Contacts)crit.uniqueResult();
delete(cp);
}
}
的ContactController
@Repository("contactsDao")
public class ContactsDAOImpl extends AbstractDao<Integer, Contacts> implements ContactsDao{
static final Logger logger = LoggerFactory.getLogger(ContactsDAOImpl.class);
public Contacts findById(int id) {
Contacts cp = getByKey(id);
return cp;
}
public Contacts findByName(String name) {
logger.info("SSO : {}", name);
Criteria crit = createEntityCriteria();
crit.add(Restrictions.eq("ssoId", name));
Contacts cp = (Contacts)crit.uniqueResult();
return cp;
}
@SuppressWarnings("unchecked")
public List<Contacts> findAllContacts() {
Criteria criteria = createEntityCriteria().addOrder(Order.asc("contactlastname"));
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
List<Contacts> cps = (List<Contacts>) criteria.list();
for(Contacts cp : cps){
Hibernate.initialize(cp.getCompany());
}
return cps;
}
public void save(Contacts cp) {
persist(cp);
}
public void delete(String sso) {
Criteria crit = createEntityCriteria();
crit.add(Restrictions.eq("ssoId", sso));
Contacts cp = (Contacts)crit.uniqueResult();
delete(cp);
}
}
}
在contact.jsp我有
@Controller
public class ContactsController {
public ContactsController() {
System.out.println("ContactsController()");
}
@Autowired
private ContactsService contactsService;
@Autowired
CompanyService cpService;
@Autowired
MessageSource messageSource;
@InitBinder
public void binder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class,
new CustomDateEditor(new SimpleDateFormat("dd-MM-yyyy"), true));
}
@RequestMapping(value = { "/listcontacts" }, method = RequestMethod.GET)
public String listContacts(ModelMap model) {
List<Contacts> contact = contactsService.findAllContacts();
model.addAttribute("contacts", contact);
model.addAttribute("loggedinuser", getPrincipal());
return "contactlist";
}
@RequestMapping(value = { "/newcontact" }, method = RequestMethod.GET)
public String newContact(ModelMap model) {
Contacts contact = new Contacts();
model.addAttribute("contact", contact);
model.addAttribute("edit", false);
model.addAttribute("loggedinuser", getPrincipal());
return "addcontact";
}
@RequestMapping(value = { "/newcontact" }, method = RequestMethod.POST)
public String saveContact(@Valid @ModelAttribute("contact") Contacts contact, BindingResult result,
ModelMap model) {
if (result.hasErrors()) {
return "addcontact";
}
if(!contactsService.isContactsSSOUnique(contact.getContactid(), contact.getSsoId())){
FieldError ssoError =new FieldError("contact","ssoId",messageSource.getMessage("non.unique.ssoId", new String[]{contact.getSsoId()}, Locale.getDefault()));
result.addError(ssoError);
return "addcontact";
}
contactsService.saveContacts(contact);
model.addAttribute("success", "contact" + contact.getContactlastname() + " registered successfully");
model.addAttribute("loggedinuser", getPrincipal());
//return "success";
return "contactlist";
}
@RequestMapping(value = { "/edit-contact-{ssoId}" }, method = RequestMethod.GET)
public String editContact(@PathVariable String ssoId, ModelMap model) {
Contacts contact = contactsService.findBySSO(ssoId);
model.addAttribute("contact", contact);
model.addAttribute("edit", true);
model.addAttribute("loggedinuser", getPrincipal());
return "addcontact";
}
@RequestMapping(value = { "/edit-contact-{ssoId}" }, method = RequestMethod.POST)
public String updateContact(@Valid @ModelAttribute("contact") Contacts contact, BindingResult result,
ModelMap model, @PathVariable String ssoId) {
if (result.hasErrors()) {
return "addcontact";
}
contactsService.updateContacts(contact);
model.addAttribute("success", "contact" + contact.getContactlastname() + " updated successfully");
model.addAttribute("loggedinuser", getPrincipal());
return "contactlist";
}
@RequestMapping(value = { "/delete-contact-{ssoId}" }, method = RequestMethod.GET)
public String deleteContacts(@PathVariable String ssoId) {
contactsService.deleteContactsBySSO(ssoId);
return "redirect:/listcontact";
}
private String getPrincipal(){
String userName = null;
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
userName = ((UserDetails)principal).getUsername();
} else {
userName = principal.toString();
}
return userName;
}
@ModelAttribute("companies")
public List<Company> initializeCps() {
return cpService.findAllCompanies();
}
答案 0 :(得分:0)
你必须改变:
path="company"
为:
path="company.id"
在JSP页面上。