2013-09-28 2 views
1

Я планирую создать новую систему с спящим режимом. Если я создаю Hibernate классы с отображением, напримерhibernate сопоставленные и неотображаемые классы и дизайн mysql

@Entity 
@Table(name="user") 
public class User{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer userid; 

    private String username; 
    private String password; 

    @OneToOne 
    private Role userrole; 

..... 
} 

добавить роль класса

@Entity 
public class Role { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int id; 

    private String roleName; 
... 
} 

В этом случае каждый раз, когда я добавить пользователя в базу данных я должен получить объект роли из БД и добавить к объекту пользователя и сохранить его. Если я определяю такое сопоставление с другими сложными классами проектирования, я должен получить связанные сопоставленные классы из db. Я чувствую, что это дополнительная нагрузка на db. является ли им каким-либо образом эффективным способом?

У меня есть другой план, чтобы сделать, как с картированием спящего

@Entity 
@Table(name="user") 
public class User{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer userid; 

    private String username; 
    private String password; 
    private Integer roleid; 
.... 
} 

В этом случае я могу только добавить идентификатор для объекта пользователя и сохраните его. Но классы db не будут отображаться. если я сделаю это ко всем классам, у меня будут таблицы db без отображения внутри db , если я сделаю это, чтобы получить имя роли, мне нужно создать другой sql для получения этой роли.

Итак, в первом подходе при сохранении объекта я получил объект и сохранил, а во втором подходе мы должны создать два sql для получения двух объектов. Это хороший способ его реализовать?

Из этих двух установок, которые являются хорошими, эффективными и простыми в использовании? Любое обсуждение рекомендуемого способа, пожалуйста?

ответ

1

В этом случае каждый раз, когда я добавить пользователя в базу данных я должен получить объект роли из БД и добавить к объекту пользователя и сохраните его. Если Я определяю такое сопоставление с другими сложными классами проектирования, я должен получить связанные сопоставленные классы из db. Я чувствую себя так: дополнительная нагрузка на db. является ли им каким-либо образом эффективным способом?

Здесь вы не загрузили объект роли из базы данных. Вы должны просто создать экземпляр Role и добавить его с помощью User.

Role r=new Role(); 
    r.setName("ROLE_NAME"); 

    user.setRole(r); 
    r.setUser(user); 
    session.saveOrUpdate(user); 
    session.saveOrUpdate(r); 

Если вы каскад роли с пользователем, чем вы можете уменьшить дубликат saveOrUpdate() операцию.

Из этих двух установок, которые являются хорошими, эффективными и простыми в использовании? Любые обсуждение рекомендуемого способа, пожалуйста?

Как правило, для роли аутентификации JDBC и таблицы пользователей должна быть отдельно и сопоставлена. Итак, первый подход рекомендуется.

+0

просто создайте объект роли с идентификатором и установите его для пользовательского объекта. Благодарю. И пользователь имеет набор адресов и сделал его ленивым инициализацией, чтобы избежать загрузки всего адреса, когда я получаю пользовательский объект. Но если я хочу получить всех пользователей с адресом, как вы можете его получить. это может быть простой вопрос, потому что я новичок в спящем режиме? –

+1

Если вы определяете ленивую инициализацию, адрес не будет загружаться с пользователем. Когда вы вызываете user.getAddress(), тогда адресный запрос будет запускаться в базе данных и загружать адрес с помощью таблицы пользователя. – Masudul

+0

Благодарим вас, что этот объект пользователя должен находиться в состоянии сохранения. –

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