Olá pessoal, fiz um relacionamento OneToMany unidirecional mas estou com o seguinte problema:
Tenho as entidades Marca e Modelo, uma marca tem vários modelos,
quando vou cadastrar uma marca Chevrolet e um modelo Vectra, fica assim as tabelas:
a tabela marca: nome: Chevrolet ID=1
a tabela modelo: nome: Vectra ID=2
Tipo, era pro ID do modelo iniciar com 1, mas ele sempre começa/continua apartir do ID da marca.
Uso o Framework Seam 2.2.1.Final, Eclipse Helios, Jboss Tools 3.2, PostgresSQL.
@Entity
@Name("modelo")
public class Modelo implements Serializable {
private static final long serialVersionUID = 1769914963712366019L;
private int id;
private String nome;
@Id @GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
@Entity
@Name("marca")
public class Marca implements Serializable {
private static final long serialVersionUID = -2209779972810899787L;
private int id;
private String nome;
private List<Modelo> modelos = new ArrayList<Modelo>();
@Id @GeneratedValue
@Column(name="MARCA_ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@OneToMany(cascade={CascadeType.ALL})
@JoinColumn(name="MARCA_ID")
public List<Modelo> getModelos() {
return modelos;
}
public void setModelos(List<Modelo> modelos) {
this.modelos = modelos;
}
}
@Stateless
@Name("modeloAction")
public class ModeloAction implements MarcaInterface {
@In
private Modelo modelo;
@In
private Marca marca;
@PersistenceContext
private EntityManager entityManager;
public String cadastrar() {
try
{
if (modelo.getNome() == "")
modelo.setNome("Sem Nome");
marca = entityManager.find(Marca.class, marca.getId());
if (marca != null){
marca.getModelos().add(modelo);
entityManager.persist(marca);
FacesMessages.instance().add("#{modelo.nome} cadastrado com sucesso!");
}else
FacesMessages.instance().add("Marca não encontrada!");
return null;
}
catch(IllegalArgumentException e)
{
FacesMessages.instance().add("Argumento Inválido");
return null;
}
catch(TransactionRequiredException e)
{
FacesMessages.instance().add("Argumento Inválido");
return null;
}
}
public String excluir() {
return null;
}
}
@Stateless
@Name("marcaAction")
public class MarcaAction implements MarcaInterface {
@In @Out
private Marca marca;
@PersistenceContext
private EntityManager entityManager;
public String cadastrar() {
try
{
if (marca.getNome() == "")
marca.setNome("Sem Nome");
entityManager.persist(marca);
FacesMessages.instance().add("#{marca.nome} cadastrada com sucesso!");
return null;
}
catch(IllegalArgumentException e)
{
FacesMessages.instance().add("Argumento Inválido");
return null;
}
catch(TransactionRequiredException e)
{
FacesMessages.instance().add("Argumento Inválido");
return null;
}
}
public String excluir() {
return null;
}
}
<head>
<title>Cadastro de Modelos</title>
</head>
<body>
<f:view>
<h:form>
NOME:<h:inputText value="#{modelo.nome}" /><br/>
ID MARCA:<h:inputText value="#{marca.id}" /><br/>
<h:commandButton value="Cadastrar" action="#{modeloAction.cadastrar}" />
<h:messages id="messages"/>
</h:form>
</f:view>
</body>
</html>
<head>
<title>Cadastro de Marcas</title>
</head>
<body>
<f:view>
<h:form>
NOME:<h:inputText value="#{marca.nome}" /><br/>
<h:commandButton value="Cadastrar" action="#{marcaAction.cadastrar}" />
<h:messages id="messages"/>
</h:form>
</f:view>
</body>
</html>