2014-10-13 3 views
2

При сохранении некоторых данных из формы мне также необходимо добавить FK в таблицу Record. FK - User.Id. Я знаю, как сохранить данные из поля ввода на форме, но как я могу установить FK (INT значение) для этого:Получить зарегистрированный пользовательский объект и сохранить его как внешний ключ

@ManyToOne 
@JoinColumn(name = "id") 
@Cascade({CascadeType.ALL}) 
private User user; 

Есть ли какой-нибудь способом, чтобы получить объект, который относится к вошедшему пользователю и сделать что-то например: record.setUser (пользователь)?
Я googled это, но мне не удалось найти, как добиться этого.

Это мой класс сущности.

@Entity 
public class Record implements java.io.Serializable{ 

    @Id 
    @GeneratedValue 
    private int recordId; 

    private String recordName; 
    private String recordComment; 
    private Date recordDate; 
    private Integer price; 
    @ManyToOne 
    @JoinColumn(name = "userId", insertable = true, updatable = false) 
    @Cascade({CascadeType.ALL}) 
    private User user; 

    ...... 
    } 

@Entity 
@Table(name = "system_user") 
public class User implements java.io.Serializable{ 

    @Id 
    @GeneratedValue 
    private int userId; 

    @NotEmpty 
    @Email 
    private String email; 
    @Size(min=2, max=30) 
    private String name; 
    private String enabled; 
    @NotEmpty 
    private String password; 

    private String confirmPassword; 

    @Enumerated(EnumType.STRING) 
    @Column(name = "user_role") 
    private Role role; 

     @OneToMany(fetch = FetchType.EAGER,mappedBy = "user", orphanRemoval=true) 
     @Cascade({CascadeType.ALL}) 
     private List<Record> records; 

     public void addToRecord(Record record) { 
     record.setUser(this); 
     this.records.add(record); 

     } 

     .... 
} 

Это, как я сохранить данные в БД:

@RequestMapping(value = "/protected/add", method = RequestMethod.POST) 
    public String addCost (@ModelAttribute("record") Record record,HttpSession session){ 
     User user = userManager.getUserObject(userManager.getUserId(session.getAttribute("currentUser").toString())); 

     user.addToRecord(record); 
     recordService.addRecord(record); 
     return "redirect:/protected/purse"; 
    } 

DAO:

public void addRecord(Record record) { 
     sessionFactory.getCurrentSession().save(record); 

    } 

UPDATE: проблема была частично решена, выше код отлично работает для меня.

+0

Пользовательский объект будет содержать объект «Список/набор объектов записи». Это означает, что вам нужно создать первый объект пользователя, а затем установить все записи в объекте пользователя, а затем сохранить объект пользователя, ваша проблема будет решена. Если ваш пользовательский объект равен нулю, вы не можете продолжить. –

+0

Я добавил следующий код: 'public void addToRecord (Запись) { record.setUser (this); this.records.add (запись); } Пользователь user = new Пользователь(); user.setId (1); user.setName ("admin"); ... некоторые другие сеттеры user.addToRecord (запись); record.setUser (пользователь); recordService.addRecord (record); ' Но FK не был сохранен, и у меня нет ошибок messsag. –

+0

Я исправил его: просто измените @JoinColumn (name = "userId", insertable = false, updatable = false) на @JoinColumn (name = "userId", insertable = true, updatable = false) –

ответ

0

Кроме того, необходимо создать объект пользователя и установить объект пользователя в записи объекта, используя приведенный ниже код

record.setUser(userObj); 

и пользователь внешнего ключа автоматически будет сохранен в базе данных.

+0

Я пробовал это раньше, но новый объект User() не содержит информации о зарегистрированном пользователе (имеет нулевые поля), и я получил ошибку проверки. –

+1

вы должны установить пользовательскую информацию в объекте пользователя, а затем сохранить объект записи – DeepInJava

+0

Означает ли это, что мне нужно получить имя пользователя, идентификатор пользователя, пароль и другие требуемые данные из сеанса или запроса БД, а затем установить его в новый объект User? Таким образом, я не могу получить весь объект, который относится к зарегистрированному пользователю, не так ли? –

Смежные вопросы